查询以获取与另一个表匹配的记录?

时间:2011-03-08 13:38:31

标签: sql sql-server

使用SQL Server 2008,我有abc和xyz表

ABC

abc_id  | xyz_id1 | xyz_id2
---------------------------
 1     |  foo123  |  foo125
 2     |  foo127  |  foo129

xyz table

xyzid      | abc_id | location   | sequence_id
------------------------------------------
foo123     |  1     | park       | 1
foo124     |  1       mall       | 2
foo125     |  1     | park       | 3
foo127     |  2     | restaurant | 1
foo128     |  2     | lake       | 2
... -- several xyz records for order 2
foo130     |  2     | mall       | 5

我需要获取所有abc_id,其xyz_id1的位置等于xyz_id2的位置。 (公园==公园)。 xyz_id1和xyz_id2将始终是xyz表中的最小和最大序列号,因此可能会在查询中的某处使用max(sequence_id)。

在此示例中,它将返回“1”。 (这将返回许多记录,而不仅仅是标量值)。

我的代码有一些业务逻辑,我宁愿不分享。有人可以提供一些帮助吗?我很确定我需要一些子查询或临时表?

3 个答案:

答案 0 :(得分:2)

SELECT abc_id
FROM abc
INNER JOIN xyz1 ON abc.xyz_id1=xyz1.xyzid
INNER JOIN xyz2 ON abc.xyz_id2=xyz2.xyzid
WHERE xyz1.location=xyz2.location

这样可以避免GROUPING。

答案 1 :(得分:0)

加入表格两次,每次xyz_id

select  *
from    abc
join    xyz as xyz1
on      xyz1.xyzid = abc.xyz_id1
join    xyz as xyz2
on      xyz2.xyzid = abc.xyz_id2
where   xyz1.location = xyz2.location
        and xyz1.location = 'park'

答案 2 :(得分:0)

SELECT abc_id FROM abc a1 INNER JOIN xyz x1 ON a1.xyz_id1 = x1.xyzid INNER JOIN xyz x2 ON a1.xyz_id1 = x2.xyzid WHERE x1.location = x2.location