我有一个列列表,例如a,b,c,d,e,f。 理想情况下,其中只有一个可以有价值。 我如何找出违反此规则的行。 谢谢。
答案 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;
答案 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
答案 2 :(得分:0)
像您这样的声音,一个值不应有6列,而应该是1列,也许还要加上第二列来说明它代表的是什么(a..f)。