gpt4 book ai didi

MySQL:仅当另一列中的值唯一时才设置值

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:21 24 4
gpt4 key购买 nike

我想将一列中的 bool 值SET设置为 True,但前提是相邻列中的值是唯一的(无论该值是什么)。

假设 ROOM_IS_PRIVATE 是我设置的 bool 列,ROOM_VALUE 是我要检查其值唯一性的列。我对编写查询相当陌生,所以这是我目前所拥有的:

SET ROOM_IS_PRIVATE = '1'
WHERE COUNT(ROOM_VALUE) = 1;

但这对我不起作用。我使用计数功能是否正确?

编辑:这是我希望实现的结果示例:

|  ROOM_VALUE  |  ROOM_IS_PRIVATE  |
|--------------|-------------------|
| 54 | 0 |
| 13 | 1 |
| 08 | 0 |
| 08 | 0 |
| 54 | 0 |
| 19 | 1 |
| 08 | 0 |

只有当第一列中的值对该列唯一时,第二列才会变为 1

最佳答案

SET 子句看起来是正确的。但这不是一个有效的陈述;看起来我们缺少 UPDATE 关键字,即我们要更新的表的名称。

如果我们只想修改 room_value 唯一的行,我们可以这样做:

UPDATE mytable t
JOIN ( SELECT r.room_value
, COUNT(*) AS cnt
FROM mytable r
GROUP BY r.room_value
) s
ON s.room_value = t.room_value
SET t.room_is_private = CASE WHEN s.cnt = 1 THEN 1 ELSE t.room_is_private END

内联 View s 被执行,结果被具体化为派生表。这让我们得到了不同的 room_value 值,以及具有相同 room_value 的行数。

然后我们将派生故事连接回原始表,匹配 room_value 列,所以现在,对于我们表中的每一行,我们可以知 Prop 有相同 的行数>房间值

SET 子句中,我们使用一个测试计数的表达式,并有条件地分配一个 1(当 cnt=1 时)否则保持 room_is_private 的值不变。

我怀疑当 room_value 不是唯一时,我们可能还想设置 room_is_private = 0,而不是将 room_is_private 设置为当前值(即保持不变) ,我们将改为分配一个 0

UPDATE mytable t
JOIN ( SELECT r.room_value
, COUNT(*) AS cnt
FROM mytable r
GROUP BY r.room_value
) s
ON s.room_value = t.room_value
SET t.room_is_private = CASE WHEN s.cnt = 1 THEN 1 ELSE 0 END

关于MySQL:仅当另一列中的值唯一时才设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50533568/

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