给出三个表之间的匹配SQL

时间:2016-04-01 21:38:50

标签: mysql sql database relational-database

我正在编写一个脚本,以检查多个用户是否看到新闻,以便查看该用户从未检查过的新消息。我认为服务一直要求服务器提供用户从未阅读过的新闻。但我不知道如何写它。(我已经使用了笛卡尔积,但是没有用)。 换句话说,如何检查用户是否没有阅读此新闻并给我提供通知的方法。 如果有人可以帮助我吗? 这些是我的数据库中的三个表:Users,News和Seen。

这是用户表:

User_ID | User_Name
--------------------
1       | John
2       | Carl
3       | Tomas
4       | Adam
5       | Nancy

新闻表:

News_ID | News_Text
--------------------
1       | Hello World
2       | This is My car
3       | I had Ate pizza
4       | No Body Want Programming
5       | C++ Programming

这也是看见表:

ID   | User_Id  | News_Id
---------------------------
1    |  1       | 2
2    |  1       | 3
3    |  4       | 1
4    |  5       | 3
5    |  1       | 4

2 个答案:

答案 0 :(得分:2)

这应该得到“UserIdYouCareAbout”没有看到的所有新闻的News_ID(用您要查询的User_ID替换< UserIdYouCareAbout>)。

SELECT News.News_ID AS 'Unseen News ID'
FROM News 
    LEFT JOIN Seen ON Seen.News_ID = News.News_ID AND Seen.User_ID = <UserIdYouCareAbout>
WHERE
    Seen.ID IS NULL

答案 1 :(得分:0)

SELECT *
FROM News
WHERE News_ID NOT IN (
    SELECT News_Id FROM Seen WHERE User_Id = <userID>
)