也许是一个非常简单的问题,似乎有一个相当复杂的答案,我无法挖掘出来。
我正在使用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数组操作来解决这个问题,所以它不是那么大的交易。
答案 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)