我正在尝试准备一个查询,以便将每日报表中的新条目插入到SQLServer数据库中的一个单独表中。
我有两张table如下:
表1
id style_code location_code
-------------------------------
1 abcd IST
2 abcd DEL
3 wxyz DEL
表2
id style_code location_code
--------------------------------
1 abcd IST
2 wxyz IST
3 abcd DEL
4 wxyz DEL
我想选择表2中“style\u code”和“location\u id”组合在表1中不存在的所有行。在这个特定的示例中,这意味着从表2中返回的第2行“wxyx&ist”在表1中不存在(id列之间没有关系。表2是临时表)
我一直试图将连接放入带有not in的select查询中,但似乎无法使查询正常工作。
SELECT *
FROM [Table 2]
WHERE style_code NOT IN (SELECT style_code
FROM [Table 1]
INNER JOIN [Table 2] ON [Table 2].location_code = [Table 1].location_code);
我有一个sql编码初学者的理解,但不是Maven,并将感谢任何指导。
3条答案
按热度按时间qcuzuvrc1#
你可以用
NOT EXISTS
以及相关子查询。ckocjqey2#
你可以用
NOT EXISTS
:有些数据库(越来越多)确实支持具有
IN
以及NOT IN
. 但是,sql server不在其中。此外,我强烈建议使用
NOT EXISTS
而不是NOT IN
使用子查询时。NOT IN
如果子查询返回的任何值是NULL
. 那样的话,NOT IN
过滤掉所有行,结果集为空。vxbzzdmp3#
另一种方法-您可以使用
LEFT OUTER JOIN
. 这个sql可能会比其他sql提供更好的性能NOT EXISTS
或者NOT IN
条款。