MSSQL SP:使用另一个表中的ID从一个表中选择所有行

时间:2017-06-26 07:22:25

标签: sql-server sql-server-2012

也许是一个非常简单的问题,似乎有一个相当复杂的答案,我无法挖掘出来。

我正在使用SQL-server 2012。

我有这两个语句,它们根据参数选择我的所有数据,然后根据从第一个选择中获取的ID,从另一个表中选择最多五行数据(这意味着没有连接)。

SELECT * FROM TBL1 WHERE XXX
SELECT * FROM TBL2
    WHERE TBL1_ID IN (SELECT ID FROM TBL1 WHERE XXX)

对我来说似乎非常多余,我基本上必须在我的TBL2中重复我的TBL1选择,而我想知道我是否可以使用我从TBL1获得的数据中的ID来选择TBL2。

我完全清楚这很可能导致两个结果集不一定相关,但我通常可以使用PHP数组操作来解决这个问题,所以它不是那么大的交易。

2 个答案:

答案 0 :(得分:0)

使用IN

Declare @T1 table (ID INT , Value VARCHAR(50) );
Declare @T2 table (ID INT);

INSERT INTO @T1 Values (1,'First') , (2,'Second');
INSERT INTO @T2 Values (1),(3);

SELECT * FROM @T1 WHERE ID IN (SELECT ID FROM @T2);

Resault:

ID          Value
----------- ------------------------------------------------------------------------------
1           First

使用INNER JOIN

SELECT T1.ID , T1.Value FROM @T1 T1 INNER JOIN @T2 T2 ON T1.ID = T2.ID;

Resault:

ID          Value
----------- ------------------------------------------------------------------------------
1           First

使用LEFT JOIN

SELECT T1.ID , T1.Value FROM @T1 T1 LEFT JOIN @T2 T2 ON T1.ID = T2.ID 
WHERE T2.ID IS NOT NULL;

Resault:

ID          Value
----------- -------------------------------------------------------------------------------
1           First

答案 1 :(得分:0)

您还使用EXISTS

SELECT * FROM TBL2
    WHERE EXISTS (SELECT 1 FROM TBL1 WHERE TBL1.ID = TBL2.TBL1_ID AND XXX)