結合テーブルに一致するものがない場合、1つのテーブルからすべてのレコードを選択するにはどうすればよいですか?

ボビーオロスコ

簡単な通知システムを作成していますが、クエリを機能させることができず、混乱しています。

表2から一致する結果がない場合に見えないことを考慮して、「見えない」表1からのすべての通知を選択したいと思います。

table1 t1 (notifications)
+---+-------+--------+
+id + title + content+
+---+-------+--------+
+ 1 + some..+lorem...+
+ 2 + sosf  + sfdsdf +
+ 3 +  asdf + dsfd   +
+---+-------+--------+


table2 t2 (seen notification by each user)
+-------+---------------+
+id_user+id_notification+
+-------+---------------+
+   1   +  1            +
+   1   +  3            +
+-------+---------------+

したがって、t2に一致するレコードがない場合、t1からのすべてのレコードをクエリしたいと思います。

私は試した

SELECT t1.*
FROM t1
JOIN t2 ON t2.id_user IS NULL AND t1.id IS NULL
ORDER BY t1.id DESC;

運がない

ニック

LEFT JOINのテーブルを結合するには、を使用する必要がありますnotification_idに一致する値がない場合t2、の値は次のt2.notification_idようになりますNULL

SELECT t1.*
FROM t1
LEFT JOIN t2 ON t2.id_notification = t1.id
WHERE t2.id_notification IS NULL

出力:

id  title   content
2   sosf    sfdsdf

特定のユーザーが通知を見たかどうかを確認するには、ON条件を次のように変更します。

LEFT JOIN t2 ON t2.id_notification = t1.id AND t2.id_user = 2

これにより、ユーザー2には表示されなかったすべての通知、この場合はすべての通知が表示されます。

id  title   content
1   some..  lorem...
2   sosf    sfdsdf
3   asdf    dsfd

SQLFiddleデモ

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ