繁体   English   中英

从两个表联接查询

[英]Joining Query from Two Tables

[使用SQL Server 2000]

我不敢相信,用SQL编写代码会变得如此简单。

也许我想念一些东西。

这是由于列名不明确而无法运行的查询:

SELECT serial_Number, system_id, date_time
FROM acp_parts ap 
INNER JOIN join test_results tr ON (ap.serial_Number=tr.serial_Number)
WHERE serial_Number IN (
    'C037687 1000 11', 'C037687 1001 11', 'C037687 1002 11', 'C037687 1003 11', 
    'C037687 1004 11', 'C037687 1005 11', 'C037687 1006 11', 'C037687 1007 11',
    'C037687 1008 11', 'C037687 1009 11', 'C037687 1010 11', 'C037687 1011 11', 
    'C037687 1012 11', 'C037687 1013 11', 'C037687 1014 11', 'C037687 1015 11',
    'C037687 1016 11', 'C037687 1017 11', 'C037687 1018 11', 'C037687 1019 11',
    'C037687 1020 11', 'C037687 1021 11', 'C037687 1022 11', 'C037687 1023 11', 
    'C037687 1024 11')
ORDER BY serial_Number, date_time

我只需要一个简单的表,这些表的序列号放在一列中,它们在哪个表中(system_id),何时登录(日期时间)。

我不希望每个表都有单独的列-这会违背查询的目的。

这可能是我所缺少的简单东西。

[编辑]:对不起! 我应该补充说,在一个表中的序列号可能会或可能不会在其他表中的一个,所以我希望显示ap.serial_Number等。

[解决方案]:这就是我解决问题的方法:

SELECT serial_Number, system_id, date_time FROM ( 
    select serial_Number, system_id, date_time 
    from acp_parts ap 
    UNION ALL
    select serial_Number, system_id, date_time 
    from test_results tr
) T
where serial_Number in (
    'C037687 1000 11', 'C037687 1001 11', 'C037687 1002 11', 'C037687 1003 11', 'C037687 1004 11', 'C037687 1005 11', 
    'C037687 1006 11', 'C037687 1007 11', 'C037687 1008 11', 'C037687 1009 11', 'C037687 1010 11', 'C037687 1011 11', 
    'C037687 1012 11', 'C037687 1013 11', 'C037687 1014 11', 'C037687 1015 11', 'C037687 1016 11', 'C037687 1017 11', 
    'C037687 1018 11', 'C037687 1019 11', 'C037687 1020 11', 'C037687 1021 11', 'C037687 1022 11', 'C037687 1023 11', 
    'C037687 1024 11')
order by serial_Number, date_time

您正在加入serial_Number列,但您的order by语句未指定用于order by语句的表。 任何时候表共享列名,您都需要指定要引用的表。

如有疑问,我总是将表名放在每个字段名之前,例如“ acp_parts.serial_Number”,而不是“ serial_Number”等,这通常可以解决歧义。

您在两个表上肯定具有相同的列名。 您需要为表加上别名,并指定要从哪个表中选择哪一列。 例:

select ap.serial_Number, tr.system_id, ap.date_time
from acp_parts ap inner join test_results tr on (ap.serial_Number=tr.serial_Number)
where serial_Number in (
'C037687 1000 11', 'C037687 1001 11', 'C037687 1002 11', 'C037687 1003 11', 'C037687 1004 11', 'C037687 1005 11', 
'C037687 1006 11', 'C037687 1007 11', 'C037687 1008 11', 'C037687 1009 11', 'C037687 1010 11', 'C037687 1011 11', 
'C037687 1012 11', 'C037687 1013 11', 'C037687 1014 11', 'C037687 1015 11', 'C037687 1016 11', 'C037687 1017 11', 
'C037687 1018 11', 'C037687 1019 11', 'C037687 1020 11', 'C037687 1021 11', 'C037687 1022 11', 'C037687 1023 11', 
'C037687 1024 11')
order by ap.serial_Number, tr.date_time

我想您应该在select语句和order by子句中都使用ap.serial_Number。

希望这可以帮助!!

除了JOIN之外,您没有在SELECT中使用表别名。 假设我的表正确:

select 
    ap.serial_Number
    ,tr.system_id
    ,tr.date_time
from acp_parts AS ap
inner join test_results AS tr on ap.serial_Number=tr.serial_Number
where ap.serial_Number in (
'C037687 1000 11', 'C037687 1001 11', 'C037687 1002 11', 'C037687 1003 11', 'C037687 1004 11', 'C037687 1005 11', 
'C037687 1006 11', 'C037687 1007 11', 'C037687 1008 11', 'C037687 1009 11', 'C037687 1010 11', 'C037687 1011 11', 
'C037687 1012 11', 'C037687 1013 11', 'C037687 1014 11', 'C037687 1015 11', 'C037687 1016 11', 'C037687 1017 11', 
'C037687 1018 11', 'C037687 1019 11', 'C037687 1020 11', 'C037687 1021 11', 'C037687 1022 11', 'C037687 1023 11', 
'C037687 1024 11')
order by 
    ap.serial_Number
    ,tr.date_time

那么,数字将仅存在于一个表中还是另一个表中? 我想您想要一个UNION ALL。 以下内容未经过语法检查,但可以帮助您入门:

SELECT * FROM 
(
select 
    serial_Number, 
    system_id, 
    date_time 
from 
    acp_parts ap 

UNION ALL

select 
    serial_Number, 
    system_id, 
    date_time 
from 
    acp_parts  test_results tr
)
ORDER BY serial_Number, date_time  

是的,你失去了一些东西简单的序列号是两个表中,所以它总是有合格的,即使结果不一定会关系:

SELECT ap.serial_Number, system_id, date_time
FROM acp_parts ap 
INNER JOIN join test_results tr ON (ap.serial_Number = tr.serial_Number)
WHERE ap.serial_Number IN (
    'C037687 1000 11', 'C037687 1001 11', 'C037687 1002 11', 'C037687 1003 11', 
    'C037687 1004 11', 'C037687 1005 11', 'C037687 1006 11', 'C037687 1007 11',
    'C037687 1008 11', 'C037687 1009 11', 'C037687 1010 11', 'C037687 1011 11', 
    'C037687 1012 11', 'C037687 1013 11', 'C037687 1014 11', 'C037687 1015 11',
    'C037687 1016 11', 'C037687 1017 11', 'C037687 1018 11', 'C037687 1019 11',
    'C037687 1020 11', 'C037687 1021 11', 'C037687 1022 11', 'C037687 1023 11', 
    'C037687 1024 11')
ORDER BY ap.serial_Number, date_time

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM