1

我有两个 MySQL 表:

  • alerts
  • alerts_viewed

Alerts 是一个表,其中包含有关警报的基本信息,该alerts_viewed表包含有关已查看警报的信息(按用户 ID 和警报 ID):

上的字段alerts_viewed是:

  • ID
  • alert_id(FK 到警报表)
  • user_id(FK 到用户表)
  • is_hidden

基本上,我知道如果我只想从警报中选择具有相应行的行alerts_viewed,我可以执行 INNER JOIN。我只是不知道如何去做另一个方向。

如何从alerts表中选择表中没有相应行的所有行alerts_viewed

4

3 回答 3

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
于 2013-01-01T12:09:18.200 回答
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
于 2013-01-01T12:08:59.160 回答
0

除了 JW 和 Juergen 的回答之外,我还想提出另一种方法

不存在

select * from alerts aa
where not exists
   (select alert_id 
   from alert_viewed av
   where av.alert_id=aa.id
   )
于 2013-01-01T14:03:30.313 回答