2012-04-10 64 views
2

我有一個包含8列的MySQL表,每個表爲INT(1) default 0如何測試8個字段中只有1個是否等於1

如何測試8個字段中只有一個是否等於1?

+2

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – j08691 2012-04-10 02:46:01

+0

數據庫沒有列,表格。 – Basti 2012-04-10 02:46:43

+0

@請提供更多信息。數字可以是負數,還是大於1? – Sampson 2012-04-10 02:57:27

回答

2

試試這個:

where 1 = (field1 = 1) + (field2 = 1) + ... 

這工作,在MySQL的每一個狀況都變成了10的基礎上。如果所有條件的添加是1,那麼這意味着只有一個是1(或true)。

+2

+1這真是太棒了! :) – Basti 2012-04-10 03:05:03

0

這會工作:

SELECT field1 + field2 + field3 + field4 + field5 + field6 + field7 + field8 = 1 
     AS ONLY_ONE 

將返回1(TRUE)如果總和爲1和0(FALSE)如果是大於1(一組以上)大於或小於1(無組)。

如果沒有表/ DB嚴格模式(使值不爲0的和1是可能的),你可以這樣做:

SELECT (field1 > 0) + (field2 > 0) + (field3 > 0) ... = 1 AS ONLY_ONE 

因爲表達式爲真(1)因此如果它是1或更大(已設置),則作爲值1添加。

如果不是默認設置,那麼你可以進一步細化查詢:

SELECT COALESCE(field1 > 0, 0) + COALESCE(field2 > 0, 0) + COALESCE(field3 > 0, 0) ... 
= 1 AS ONLY_ONE 

所以覆蓋你的基地最好的辦法是:

SELECT 
COALESCE(field1 > 0, 0) + 
COALESCE(field2 > 0, 0) + 
COALESCE(field3 > 0, 0) + 
COALESCE(field4 > 0, 0) + 
COALESCE(field5 > 0, 0) + 
COALESCE(field6 > 0, 0) + 
COALESCE(field7 > 0, 0) + 
COALESCE(field8 > 0, 0) + 
= 1 AS ONLY_ONE 
FROM my_table; 
相關問題