gpt4 book ai didi

php - SQL:获取 null 作为与查询不匹配的行的返回值

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:23 25 4
gpt4 key购买 nike

我有一个表,Entity 和一个表Friends。我想获取访问过同一位置的人的姓名,但如果他们不是该人的 friend (建议的 friend 查询),我只想返回他们。为此,我编写了以下查询:

SELECT Entity_Id,
Category AS FC
FROM entity
LEFT
JOIN friends
ON entity.Entity_Id = friends.Entity_Id1
OR entity.Entity_Id = friends.Entity_Id2
WHERE Entity_Id IN ( :list_of_ids )
AND Entity_Id != :user_id
AND Category != 4
GROUP
BY Entity_Id

:list_of_ids 是用户 ID 的逗号分隔列表,在我的测试查询中有 82 个用户,但是从查询中只返回 15 个用户,其中返回的用户是与 :user_id 有关系的用户。

任何在表中没有关系的用户都不会在查询中返回。我想通过提供一个 LEFT OUTER JOIN 它会为 friends 表中找不到的字段返回 NULL。

----- EXPECTED -----
--------------------
Entity_Id FC
--------------------
1 3
2 2
3 2
4 null
52 null
64 null

------ ACTUAL -------
---------------------
Entity_Id FC
---------------------
1 3
2 2
3 2

我的friends表的结构如下,另外注意它支持互惠关系,如果有帮助...

------ FRIENDS ------
---------------------
fid PK
entity_id1 INT
entity_id2 INT
category INT -- 1 = Facebook, 2 = G+, 3 = App, 4 = Blocked

如何返回缺失关系的用户?

最佳答案

您需要一个左外连接。但是,对于 left join,第二个表的条件需要进入 on 子句:

SELECT e.Entity_Id, f.Category AS FC
FROM entity e LEFT JOIN
friends f
ON e.Entity_Id IN (f.Entity_Id1, f.Entity_Id2) AND
f.category <> 4
WHERE e.Entity_Id IN ( :list_of_ids ) AND
e.Entity_Id <> :user_id
GROUP BY e.Entity_Id;

WHERE 子句中有关于 category 的条件时,您将 LEFT JOIN 转换为 INNER JOIN。当没有匹配时,category 的值为NULL,比较失败。

关于php - SQL:获取 null 作为与查询不匹配的行的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31206273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com