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

MySQL: SET a value only if a value in another column is unique

我想 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

请这样尝试-

SELECT 
    ROOM_IS_PRIVATE = CASE WHEN COUNT(ROOM_VALUE) = 1 THEN 1 ELSE 0 END
FROM yourtableName

尝试这样的条件更新:

update a set 
a.ROOM_IS_PRIVATE= case when cnt is null then 1 else 
a.ROOM_IS_PRIVATE end 
from yourtable a  
left join(
select roomvalue, count(*) cnt
from yourtable
group by roomvalue
having count(*)>1 )b
on a.roomvalue=b.roomvalue

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

如果我们只想修改 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,并将结果具体化为派生的 table。这使我们得到 room_value 的不同值,以及具有相同 room_value.

的行数

然后我们将派生故事连接回原始 table,匹配 room_value 列,所以现在,对于 table 中的每一行,我们可以知道具有相同 room_value 的行。

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

我怀疑我们可能还想在 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