[英]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
關鍵字,即我們要更新的表的名稱。
如果只想修改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
匹配,因此,現在,對於表中的每一行,我們都可以知道具有相同room_value
的行數。
在SET
子句中,我們使用一個表達式來測試計數,並有條件地分配1
(當cnt=1
),否則將room_is_private
的值保持不變。
我懷疑我們可能還想在room_value不是唯一的情況下將room_is_private
設置為0,因此,與其將room_is_private
設置為當前值(即保持不變), 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.