我在sql server中有2个表...
我需要显示表1中的所有记录,这些记录也不会出现在表2中(因此应该给我90,000个结果。
我完全不知道如何展示它,无论是在where子句中的连接还是选择
谢谢,道歉我知道很多像这样的东西都出现在以太中
答案 0 :(得分:2)
而不是JOIN,我认为你想要除外。
SELECT * FROM table1
EXCEPT
SELECT * FROM table2
当然,只适用于列相同,或者如果您可以指定列的常用列表而不是*。
答案 1 :(得分:1)
您应该使用 LEFT OUTER JOIN 。
喜欢这样。
SELECT T1.*
FROM Table1 T1 LEFT OUTER JOIN Table2 T2
ON T1.AccountID = T2.AccountID
WHERE T2.AccountID IS NULL
解释:这会占用Table1
中的所有行,并尝试将它们与Table2
中的所有行相关联。如果匹配,Table2.AccountId
将匹配AccountID
。如果没有匹配项,则Table2.AccountId
将为NULL
。
另一种方法是在没有JOIN的情况下使用EXISTS
关键字。
答案 2 :(得分:0)
我不确定sql-server的确切语法,但在其他数据库中你可以这样做
select * from table1 t1 where t1.id not in (select id from table2)
或者'null join'方法
select * from table1 t1 left join table2 t2 on t1.id = t2.id where t2.id is null
答案 3 :(得分:0)
我认为你混淆了两个SQL概念:
通常使用Join将两个表连接在一起,这些表通过某个键链接:例如,您可能有一个登录表,其中包含具有USERID字段的用户名和密码。在另一个表中,您具有关于同一用户的地址信息,该用户也具有USERID字段。你只需SELECT ... FROM passwords p join address a on p.userid = a.userid
。这将为您提供所有用户密码以及相关的用户数据。
在你的情况下,你不需要结合,你只想使用NOT IN
SELECT * FROM TABLE 1 WHERE somevalue not in (SELECT somevalue from table2)