gpt4 book ai didi

MySQL 选择 bool 字段并创建第三个状态

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

我正在使用 MySQL,我想在现有字段上获取具有 3 个状态 (-1,0,1) 的 bool 值。

例如,如果我有 col1 = null 或 row 不存在 col2 = 0 col3 = 1

然后我这样做:

从客户中选择 col1、col2、col3

我想要得到这个:

Output
col1 = -1
col2 = 0
col3 = 1

这怎么可能?

注意:在我的代码中,我将在查询中使用 LEFT JOIN,因此当该行不存在时,我认为我会得到 null。

最佳答案

类似这样的事情:

SELECT
a.a,
COALESCE(b.b, -1) as b
FROM
a LEFT JOIN B ON a.id = b.aid

假设我们有表格:

A.id, A.a
1, 'hello'
2, 'goodbye'
3, 'what'

B.aid, b.b
1, 1
2, null

当我们用左连接加入它们时,我们将得到:

A.id, a.a,       B.aid, b.b
1, 'hello', 1, 1
2, 'goodbye', 2, null --b.b is null because the row value is null
3, 'what', null, null --b.b is null because there is no row, all b columns are null

COALESCE 按从左到右的顺序查看参数,返回第一个非空参数。如果 b 中的行不存在,或者确实存在但 b.b 在表中为 NULL,则 COALESCE 会将其转换为 -1:

A.id, a.a,       B.aid, b.b
1, 'hello', 1, 1
2, 'goodbye', 2, -1 --b.b is -1 because COALESCE found -1 as the first non null value
3, 'what', null, -1 --b.b is -1 because COALESCE found -1 as the first non null value

但是,如果您想在 b.b 为 null 时使用 0,但在 b.b 不存在时使用 -1,则需要在使用值时使用 CASE:

SELECT
a.a,
CASE WHEN b.aid IS NULL THEN -1 ELSE COALESCE(b.b, 0) END as b
FROM
a LEFT JOIN B ON a.id = b.aid

这里我们检查连接中使用的列之一,b.aid。如果为 null,我们就知道联接失败,并且 B 中没有与 A 中的该行对应的行,因此我们可以 CASE WHEN 测试 b.aid 是否为 null,如果是,则输入 -1因为我们的“-1 表示 b 中没有行”,否则如果 b.b 为空,我们可以合并将 b.b 转换为 0。这给出了如下结果:

A.id, a.a,    B.aid, b.b
1, 'hello', 1, 1
2, 'goodbye', 2, 0 --b.b is 0 because CASE WHEN's ELSE block was used, and COALESCE found 0 as the first non null value
3, 'what', null, -1 --b.b is -1 because CASE WHEN's WHEN block fired, because b.aid was null, and CASE WHEN provided -1 as the value

关于MySQL 选择 bool 字段并创建第三个状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56985313/

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