gpt4 book ai didi

sql - 外键列可以为NULL的查询

转载 作者:行者123 更新时间:2023-11-29 11:24:48 25 4
gpt4 key购买 nike

如果 orgid = 2 或者 uid 根本没有行,我想获取数据。 orgid 是一个整数。我能想到的最接近的事情是做 IS NULL 但我没有获取没有 orgiduid 的数据排。有什么想法吗?

select u.uid,u.fname,u.lname from u 
inner join u_org on u.uid = u_org.uid
inner join login on u.uid = login.uid
where u_org.orgid=2 or u_org.orgid is NULL
and login.access != 4;

基本上 ORu_org.orgid 行不存在。

最佳答案

如果“uid 根本没有行”,并且您像您一样JOIN,结果是没有行。使用 LEFT [OUTER] JOIN相反:

SELECT u.uid, u.fname, u.lname
FROM u
LEFT JOIN u_org o ON u.uid = o.uid
LEFT JOIN login l ON u.uid = l.uid
WHERE (o.orgid = 2 OR o.orgid IS NULL)
AND l.access IS DISTINCT FROM 4;

此外,您需要我添加的括号,因为 operator precedence . (ANDOR 之前绑定(bind))。

我在最后一个 WHERE 条件中使用 IS DISTINCT FROM 而不是 != 因为 login.access 可能是 NULL,不合格。

但是,因为您似乎只对表 u 中的列感兴趣,所以这个替代查询会更优雅:

SELECT u.uid, u.fname, u.lname
FROM u
WHERE (u.uid IS NULL OR EXISTS (
SELECT 1
FROM u_org o
WHERE o.uid = u.uid
AND o.orgid = 2
))
AND NOT EXISTS (
SELECT 1
FROM login l
WHERE l.uid = u.uid
AND l.access = 4
);

这个替代方案还有一个额外的优势,即您总是从 u 获得 一个 行,即使 u_org登录

关于sql - 外键列可以为NULL的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13618078/

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