我想SET
在一列中将布尔值设置为True,但前提是相邻列中的值是唯一的(无论该值是什么)。
假设ROOM_IS_PRIVATE
是我正在设置的布尔列,并且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
s
执行内联视图,并将结果具体化为派生表。这使我们获得的不同值room_value
,以及相同的行数room_value
。
然后,我们将派生的故事重新连接到原始表,在room_value
列上匹配,因此现在,对于表中的每一行,我们都可以知道具有相同的行数room_value
。
在该SET
子句中,我们使用一个表达式来测试计数,并有条件地分配一个1
(when cnt=1
),否则将其值room_is_private
保持不变。
我怀疑room_is_private
当room_value不是唯一的时,我们可能还想将其设置为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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句