2017-07-11 95 views
1

有两个表table1中表2 想加入这些表,并希望取回,因为有行这是两个表中不等于表1行。SQL查询不等于行

表1

ID NAME Dept 
1 B  Finance 
2 R  HR 
3 B  CDU 

表2

ID PASSPORT 
1 Yes 
2 No 

它不工作

SELECT table1.ID, table1.NAME, table1.Dept FROM TABLE1 INNER JOIN TABLE2 ON 
TABLE1.ID != TABLE2.ID 

预期结果

ID NAME DEPT 
    3  B  CDU 
+1

感谢刚才编辑的一个更好的描述 –

+0

显示您预期的结果 – JYoThI

+0

OK让我编辑 –

回答

4

使用左连接并where子句抢了仅在表1的值

select 
    table1.id, 
    table1.name, 
    table1.Dept 
from 
    table1 
    left join table2 on table2.id = table1.id 
where 
    table2.id is NULL; 

以上查询输出:

output

如果无法找到第二个表中的记录,则左连接将插入空值。因此,在where子句中添加所有无法在第二个表中找到的结果。

下面是一个使用left joinhttps://www.w3schools.com/sql/sql_join_left.asp

+0

它不会工作因为它会显示表1中的所有左表行,请检查我的预期结果 –

+0

不,它应该工作。我一直在编写SQL,它只是在你关心的列中得到你想要添加的内容。 – Adam

+0

让我再试一次 –

1

尝试此查询 -

SELECT ID 
    ,NAME 
    ,Dept 
FROM TABLE1 
WHERE ID NOT IN (
     SELECT DISTINCT ID 
     FROM Table2 
     WHERE ID IS NOT NULL 
     ); 
+0

'WHERE ID不是NULL'是因为它很可能不必要'ID'是主键和总是有一个值。 – Adam

+0

是的。我不知道这一点,所以我通过添加它来照顾它。 –

+0

@Adam - 这是需要'不IN'会失败时'子query'返回任何'NULL'价值......至少在'的Sql Server' –