2013-01-01 63 views
1

我有兩個MySQL表:如何從相關表中沒有相應行的表中選擇行?

  • alerts
  • alerts_viewed

警報是一個包含有關警報的基本信息的表格,以及alerts_viewed表包含有關觀看警報信息(用戶ID和警報ID):

alerts_viewed上的字段是:

  • ID
  • ALERT_ID(FK以警告表)
  • USER_ID(FK到用戶表)
  • is_hidden

基本上,我知道,如果我想選擇的警報僅行在alerts_viewed有相應的行,我可以做一個INNER JOIN。我只是不知道如何去做另一個方向。

如何從alerts表中選擇alerts_viewed表中沒有相應行的所有行?

回答

4

使用LEFT JOIN

SELECT a.* 
FROM alerts a 
     LEFT JOIN alerts_viewed b 
      ON a.alert_id = b.alert_id 
WHERE b.alert_id IS NULL 
+0

非常完美,非常感謝您的快速響應! –

+0

不客氣。新年快樂! ':D' –

+0

同樣給你! :) –

1
select * from alerts 
where id not in (select alert_id from alert_viewed) 

select a.* from alerts a 
left outer join alert_viewed av on a.id = av.alert_id 
where av.alert_id is null 
+0

會不會導致兩個查詢? –

0

除了JW和Juergen的答案,我想提出另一種方式與

NOT EXISTS

select * from alerts aa 
where not exists 
    (select alert_id 
    from alert_viewed av 
    where av.alert_id=aa.id 
    ) 
+0

好主意,除了語法錯誤:子查詢應該與外部查詢相關:'WHERE NOT EXISTS(SELECT * FROM alert_viewed av WHERE a.id = av.alert_id)' – wildplasser

+0

@wildplasser感謝您指出它出去兄弟。正在編輯.. – Mari

+0

對不起,糾正你。這個想法是axellent,但語法不對。 – wildplasser

相關問題