mysql的列列表仅检查其中之一是否有价值

时间:2018-10-30 16:19:10

标签: mysql conditional-statements

我有一个列列表,例如a,b,c,d,e,f。 理想情况下,其中只有一个可以有价值。 我如何找出违反此规则的行。 谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用:

SELECT *
FROM tab
WHERE LENGTH(CONCAT(
      IF(a IS NULL,'','.'),
      IF(b IS NULL,'','.'),
      IF(c IS NULL,'','.'),
      IF(d IS NULL,'','.'),
      IF(e IS NULL,'','.'),
      IF(f IS NULL,'','.'))) <> 1;

db<>fiddle demo

答案 1 :(得分:1)

假设一列中没有值意味着null(不是空字符串'')。我们可以利用比较运算符IS NOT NULL。如果该值不是null,则返回1;否则返回1。否则1。

每个列的上述比较结果的总和应仅等于1(如果一行中只有一个非空列)。

SELECT *
FROM your_table_name 
WHERE ((a IS NOT NULL) + 
       (b IS NOT NULL) + 
       (c IS NOT NULL) +
       (d IS NOT NULL) + 
       (e IS NOT NULL) +
       (f IS NOT NULL)) <> 1

DB Fiddle DEMO

答案 2 :(得分:0)

像您这样的声音,一个值不应有6列,而应该是1列,也许还要加上第二列来说明它代表的是什么(a..f)。