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

Sql server MSSQL SP:使用另一个表的ID从一个表中选择所有行,sql-server,sql-server-2012,Sql Server,Sql Server 2012,也许是一个相当简单的问题,似乎有一个相当复杂的答案,我还没能找出 我正在使用SQLServer2012 我有这两条语句,它根据一个参数选择我的所有数据,然后根据从第一次选择中获得的ID从另一个表中选择最多五行数据(这意味着没有连接) SELECT * FROM TBL1 WHERE XXX SELECT * FROM TBL2 WHERE TBL1_ID IN (SELECT ID FROM TBL1 WHERE XXX) 这对我来说似乎很多余,我基本上必须在我的TBL2中重复我的TB

也许是一个相当简单的问题,似乎有一个相当复杂的答案,我还没能找出

我正在使用SQLServer2012

我有这两条语句,它根据一个参数选择我的所有数据,然后根据从第一次选择中获得的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数组操作来解决这一问题,所以这并不是什么大问题。

在中使用

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);
结果:

ID          Value
----------- ------------------------------------------------------------------------------
1           First
使用
内部联接

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

ID          Value
----------- ------------------------------------------------------------------------------
1           First
使用左联接

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

ID          Value
----------- -------------------------------------------------------------------------------
1           First
您还可以使用EXISTS

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

这正是我写我自己版本的方式。。。你的和我的并没有什么不同。它看起来可能是多余的,但任何其他方式都只会更加复杂。除非您想将它们连接在一起,并选择TBL1中的数据和TBL2中的数据,否则检索一个数据集而不是两个。@Honeybacker它可能更复杂,但有时我可能会选择0到10.000行,这意味着三个选择与我认为的只有两个相比会非常费力。如果您对“为什么他会选择10.000行并且是SP的新手”感到困惑,我目前的工作任务是编写SP,以向一家应该为我们编写SP的公司展示我们希望SP如何工作。在这种情况下,更复杂的情况很可能也意味着性能更低、安全性更低和/或完全危险。我不太明白为什么您必须进行性能调整,如果这只是为了向将要构建SP的人员展示它应该提供什么样的结果,那么这当然是他们的工作。另外,10.000行在数据库中并不多,我不会为此担心。aight@HoneyBadger,感谢您的考虑和我的问题,我将坚持这种方式,然后看看这将导致项目的进展