首页 > 解决方案 > Mysqli 从给定值在任何列中的行中获取多个不同的值

问题描述

我有一个这样的数据表。更接近数据的描述。

col0  |  col1 |  col2  |  col3  | col4
======================================
milk  | egg   | juice  |        |
egg   | juice |        |        |
bread | jam   | juice  |        |
wheat | egg   | juice  |        |
jam   | juice |        |        |

我想首先在所有列中搜索 Juice 并获取找到 juice 的所有行。然后我必须获取具有最独特和完整数据的行。在这种情况下,它是第一行,因为它具有最独特和最完整的数据集,没有重复的单词。所以,从这些数据中,如果我搜索“果汁”,那么我想要这个结果

 milk  | egg   | juice  |
 bread | jam   | juice  |
 wheat | egg   | juice  |

我已经尝试过GROUP BY所有DISTINCT列组合,但我无法得到想要的结果。我用了这个语句

SELECT * FROM `table` 
WHERE `col4` = 'juice' OR`col3` = 'juice' OR `col2` = 'juice' OR `col1` = 'juice' 
group by `col2`,`col1`,`col0`;

我更希望它出现在一个声明中,而不是单独的声明中。

标签: mysqlmariadbdistinct

解决方案


如果多列之间没有重复值,并且空列使用 表示NULL,那么我们可以利用 MySQL 将 boolean 隐式类型转换为 int :

SELECT * 
FROM your_table 
WHERE 'juice' IN (col1, col2, col3, col4) 
ORDER BY ( (col1 IS NOT NULL) + 
           (col2 IS NOT NULL) +
           (col3 IS NOT NULL) +
           (col4 IS NOT NULL) ) DESC
LIMIT 1

结果

| col0 | col1 | col2  | col3 | col4 |
| ---- | ---- | ----- | ---- | ---- |
| milk | egg  | juice |      |      |

在 DB Fiddle 上查看


推荐阅读