簡體   English   中英

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關鍵字,即我們要更新的表的名稱。

如果只想修改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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM