Php 需要SQL查询的帮助。使用外部联接或并集合并项目
如果表1中的用户ID 1已经存在于表2中,并且具有其受尊重的POST ID,则该用户ID 1不应成为返回选择查询的一部分。相反,它将返回表1中的POST_ID 2,3,4,5 当表1中的用户ID 2已存在于表2中,且其受尊重的POST_ID已存在时,预期返回的select查询将是表1中的POST_ID 1、3、4、5以及其他ID 提前谢谢大家!:) 看起来反连接模式可以达到指定的结果Php 需要SQL查询的帮助。使用外部联接或并集合并项目,php,mysql,Php,Mysql,如果表1中的用户ID 1已经存在于表2中,并且具有其受尊重的POST ID,则该用户ID 1不应成为返回选择查询的一部分。相反,它将返回表1中的POST_ID 2,3,4,5 当表1中的用户ID 2已存在于表2中,且其受尊重的POST_ID已存在时,预期返回的select查询将是表1中的POST_ID 1、3、4、5以及其他ID 提前谢谢大家!:) 看起来反连接模式可以达到指定的结果 [TABLE 1] +---------+---------+------------------+ | pos
[TABLE 1]
+---------+---------+------------------+
| post_id | user_id | description |
+---------+---------+------------------+
| 1 | 1 | Sample post 1 |
| 2 | 1 | Sample post 2 |
| 3 | 2 | Sample post 3 |
| 4 | 2 | Sample post 4 |
| 5 | 3 | Sample post 5 |
+---------+---------+------------------+
[TABLE 2]
+---------+---------+---------+
| id | user_id | post_id |
+---------+---------+---------+
| 1 | 1 | 1 |
| 2 | 2 | 2 |
+---------+---------+---------+
那个?是用于指定用户标识的占位符字符
这实际上是说返回表1中的所有行以及表2中的匹配行,但是(这里有一个技巧)WHERE子句说排除在表2中找到匹配行的所有行。只保留表1中与表2中不匹配的行
反连接需要花费一点努力才能让你的头脑清醒过来,但一旦你明白了,它将是一个非常宝贵的工具,可以在SQL工具带中随时使用
还有其他查询模式将返回相同的结果,例如不存在(相关子查询)
或更常见的不存在(子查询)
。(对于NOT IN,请注意子查询不会返回任何空值。)
编辑
从连接谓词中删除了条件
u.user\u id=t.user\u id
。看起来[表1]
中的用户id
是这篇文章的“作者”。并且与用户是否“查看”帖子无关 基于您的示例数据,因为表1中的用户ID 1已经存在于表2中,并且具有受人尊敬的POST_ID,所以它应该返回POST_ID 2,3,4,5
查询:
SELECT t.post_id
, t.user_id
, t.description
FROM `[Table 1]` t
LEFT
JOIN `[Table 2]` u
ON u.post_id = t.post_id
AND u.user_id = ?
WHERE u.post_id IS NULL
ORDER BY t.post_id
最终结果:
SELECT t1.* FROM table2 t2
RIGHT OUTER JOIN table1 t1
ON t2.user_id = t1.user_id AND t2.post_id = t1.post_id
WHERE t2.user_id IS NULL
这就是你要找的吗?我不确定我是否理解这个问题。。。你可以编辑并给出你期望的结果集吗?问题不清楚,你至少应该包含所需的输出,以便我们有一个视觉效果。如果我了解你想要什么,你应该将POST_ID 3、4和5作为结果,而不是2,因为它来自用户_ID 1。哦,对不起,伙计们。用户id 1的预期结果为:表1中的第2,3,4,5行,用户id 2的预期结果为:表1中的第1,3,4,5行编辑查询以从联接条件中删除条件
u.user\u id=t.user\u id
。表[表1]
中的用户id
似乎是文章的作者,与用户是否“查看”了文章无关。
post_id user_id description
2 1 Sample post 2
3 2 Sample post 3
4 2 Sample post 4
5 3 Sample post 5