我正在制作一个简单的通知系统,但我无法让我的查询工作,我感到困惑。
我想从表1中选择所有“看不见”的通知,当表2中没有匹配的结果时考虑“看不见”。
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;
没有运气
1条答案
按热度按时间3bygqnnd1#
你需要使用
LEFT JOIN
加入上的表notification_id
. 其中没有匹配的值t2
,的值t2.notification_id
将NULL
:输出:
若要查看特定用户是否看到通知,请更改
ON
条件类似于:这将为您提供用户2未看到的所有通知,在本例中,所有通知都是:
sqlfiddle演示