棘手的mysql连接

棘手的mysql连接,mysql,join,Mysql,Join,我有点被sql查询卡住了。我到处都找遍了,但都没找到,所以我希望这里有人能帮忙 我有两张桌子 表1是具有以下列的通知列表 通知\u id(这是自动递增的主键) 通知(这是通知消息) 来自\u id(这是发送通知的人的用户\u id) 例如 表2显示了哪些用户已阅读每个通知。它有以下列 通知\u id(这是相关通知的id) user\u id(这是阅读通知的人的用户id) 例如 这些表是在notification\u id上连接的,我们有一个一对多的关系,因为许多用户将阅读每个通知 我试图

我有点被sql查询卡住了。我到处都找遍了,但都没找到,所以我希望这里有人能帮忙

我有两张桌子

表1是具有以下列的通知列表

  • 通知\u id
    (这是自动递增的主键)
  • 通知
    (这是通知消息)
  • 来自\u id
    (这是发送通知的人的用户\u id)
例如

表2显示了哪些用户已阅读每个通知。它有以下列

  • 通知\u id
    (这是相关通知的id)
  • user\u id
    (这是阅读通知的人的用户id)
例如

这些表是在
notification\u id
上连接的,我们有一个一对多的关系,因为许多用户将阅读每个通知

我试图做的是查询数据库以返回特定用户尚未读取的所有通知。换句话说,我需要表1中的数据,但前提是表2没有相应的
通知\u id
的user\u id所在的条目(My
user\u id
x)

因此,如果我的
user\u id
为4,那么我将获得
notification\u id
25和26的数据,因为
user\u id
4未在表2中列出

如果我的
user\u id
为2,我不会得到任何数据,因为
user\u id
2在表2中被列为同时读取了
notification\u id
25和26

如果我的
user\u id
为1,我将获得
notification\u id
26的数据,而不是25的数据

我原本以为我可以用这个

选择
通知\u id,通知,来自\u id
来自表1
内部联接表2
表1上的通知id=表2.通知id
其中table2.user_id!=X
但事实上,这离我所需要的还有很长的一段路,我已经走到了一条死胡同


谢谢

我会做一个左连接并查找空连接

SELECT notification_id, notification, from_id FROM table_1
LEFT JOIN table_2 ON table_2.notification_id = table_1.notification_id AND table_2.user_id = x
WHERE table_2.notification_id IS NULL

首先搜索用户收到的所有通知,然后再搜索所有其他通知

SELECT
    notification_id, notification, from_id 
FROM table_1 
WHERE notification_id not in 
     (SELECT notification_id
      FROM  table 2   
      WHERE table2.user_id == X)

工作是一种享受,是好的和有效的。非常感谢所有提供帮助的人。
SELECT notification_id, notification, from_id FROM table_1
LEFT JOIN table_2 ON table_2.notification_id = table_1.notification_id AND table_2.user_id = x
WHERE table_2.notification_id IS NULL
SELECT
    notification_id, notification, from_id 
FROM table_1 
WHERE 
    notification_id NOT IN (SELECT notification_id from table_2 WHERE user_id = X)
SELECT
    notification_id, notification, from_id 
FROM table_1 
WHERE notification_id not in 
     (SELECT notification_id
      FROM  table 2   
      WHERE table2.user_id == X)