当联接表不匹配时,如何从一个表中选择所有记录?

鲍比·奥罗斯科(Bobby Orozco)

我正在制作一个简单的通知系统,但无法使查询正常工作,我感到困惑。

我想从表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;

没有运气

缺口

您需要使用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 条评论
登录 后参与评论

相关文章

从一个表中选择所有记录并从另一个表中匹配记录

如何从一个表中选择与SQL Server中的另一个表完全匹配的所有记录?

如何在cakephp 3.6中从一个表中选择所有记录并从另一个表中选择一些记录

Spring Data JPA查询以从一个联接表中选择所有值

MySQL左联接:从一个表中选择所有内容,但仅将第二个表中的值与条件匹配

MySQL如何从一个表中选择列值既不是X又是Y的所有记录

如何从一个表中选择在另一表中由于某种条件而在另一表中不存在的所有记录?

当另一个表的条件满足时如何从一个表中选择记录

如何从一个表中选择另一个表中不存在的所有记录?

从一个表中选择所有记录并从第二个表中求和 MySQL

如何从一个表中选择另一个表中没有外键的记录

SQLite:从一个表中选择所有具有与不同表中 ID 匹配的 ID 的行

如何从一个表中选择不匹配的行到另一个?

从一个表中选择所有列,从另一个表中选择 1 列

SQL查询-从一个表中选择全部,在另一个表中匹配记录

如何从一个表中选择不应存在其他记录的记录

从一个表中选择所有记录,并使用额外的字段来显示是否在另一张表中找到了该记录

如何从一个表中选择另一个表中不存在的所有记录,但在不存在的记录中返回NULL

从一个表中选择记录,而另一个表中没有两列

如何从一个表中基于值选择所有内容,然后从同一表中选择具有该值的表?

SQL查询以从一个表中选择所有行,并从表2中选择行

如何从一个表中获取所有记录,并且仅从具有条件的联接表中获取记录

如何在第一次选择中选择一个表中的所有数据和另一个表中匹配数据的记录。一站式查询

MySQL查询从一个表中选择不同的值,并从一个单独的表中选择所有值

如何从一个表中获取记录,而另一个表中的ID不匹配

内部联接表,但仅从一个表中选择

当能力在另一个表中时,如何从一个表中选择数据?

从一个表中选择项,且记录的总和与子查询中的HAVING匹配

从一个表中选择条件满足另一表中的所有数据