gpt4 book ai didi

mysql - 选择其中一个列值而不是两者

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

有一个看起来像这样的表 T0,使用的是 MySQL 5.7。我在 id 中存储 id,在 C1 中存储文本,在 C2 中存储 NULL 或整数 - NULL 是默认值。 C1 中的一个条目在 C2 中可以有多个值。如果您了解 Closure 表,您会注意到该表略有不同,因为 C1 条目不对应于 id 条目。

id | C1 | C2
---+----+-----
1 | a | NULL
2 | b | NULL
3 | c | NULL
4 | c | 3
5 | c | 5
6 | d | NULL

C1 的值存储在 C2 中。该表设置为 C1 不能在 C2 中有重复值。例如,c 不能有两个 3。所以这张 table 是独一无二的。

希望查询返回字段 C1 值为 3 的所有行,如果 C1 值不为 3,则返回 C1 值为 NULL 的行。

已尝试以下代码但无济于事。

SELECT *
FROM T0
WHERE C2 = 3 OR C2 IS NULL

因此查询应该能够返回 1、2、4 和 6。期望的结果是:

id | C1 | C2
---+----+-----
1 | a | NULL
2 | b | NULL
4 | c | 3
6 | d | NULL

最佳答案

您可以使用 NOT EXISTS 检查该条件:

SELECT *
FROM t
WHERE (
C2 = 3
) OR (
C2 IS NULL AND NOT EXISTS (
SELECT 1
FROM t AS x
WHERE x.C1 = t.C1 AND x.C2 = 3
)
)

关于mysql - 选择其中一个列值而不是两者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55746743/

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