所以我有两张桌子。表1列出了ID和名称。表2列出了ID&另一个表中ID的引用。我想找到其他id等于201的所有值,但也要找到table2中ID不存在的值。 (换句话说,如果一个ID存在于table1中,并且也在table2中,但是并没有与另一个ID 201相关联,我也不想要它,但我也想要ID那个不在表1或表5中的表格中
到目前为止,我有:
SELECT table1.thisID, table1.thisName
FROM table1
INNER JOIN table2
ON table2.otherID=201 AND table2ID.thisID=table1ID.thisID
AND table1.thisID NOT IN (table2.thisID)
最后一行似乎没有做到这一点。建议有帮助。 感谢。
编辑:
我所追求的是表1中的值,其中ID为5,或者在表2中只是不存在。
示例数据:
table1-
thisID thisName
1 name1
2 name2
3 name3
4 name4
5 name5
table2-
otherID thisID
201 5
209 3
210 2
所以我正在寻找它从table1返回的是thisID 1,4,5和相应的名字。因为表2中已经存在3和2而不是5.希望更有意义。
期望的结果是:
thisID thisName
1 name1
4 name4
5 name5
因为表2中不存在1和4,但是5与201相关。
也许是一种更为时髦的感觉:
WHERE table2.otherID=201
AND table2.thisID=table1.thisID
BUT ALSO IF table1.thisID DOES NOT EXIST IN table2
答案 0 :(得分:0)
看一下Intersect和Except。您可以了解有关这些T-SQL函数的更多信息here。
Intersect将在两个表/查询(左右输入查询)中找到所有匹配的行。除了会在第一个查询/表格(左)中找到第二个查询/表格中没有的所有行(右)
答案 1 :(得分:0)
如果我理解你的问题,那么应该这样做:
SELECT *
FROM table1 t1
WHERE t1.ID = 5
OR NOT EXISTS(SELECT 1 FROM table2
WHERE ID = t1.ID)
带有演示的
答案 2 :(得分:0)
代码:
SELECT table1.thisID,table1.thisName FROM table1 LEFT JOIN table2 ON table2ID.thisID = table1ID.thisID WHERE table2ID.ThisID = 5 OR table2ID.ThisID IS NULL
答案 3 :(得分:-1)
你的最后一行应该是这样的:
SELECT table1.thisID, table1.thisName
FROM table1
INNER JOIN table2
ON table2.thisID=5 AND table2ID.thisID=table1ID.thisID
AND table1.thisID NOT IN (SELECT DISTINCT thisID FROM table2)