1

2 つの MySQL テーブルがあります。

  • alerts
  • alerts_viewed

Alerts は、アラートに関する基本情報を含むテーブルであり、このalerts_viewedテーブルには、表示されたアラートに関する情報 (ユーザー ID およびアラート ID ごと) が含まれます。

上のフィールドは次のalerts_viewedとおりです。

  • ID
  • alert_id (アラート テーブルへの外部キー)
  • user_id (users テーブルへの外部キー)
  • 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とユルゲンの答えとは別に、もう1つの方法を提案したいと思います

存在しない

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 に答える