mysql - 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`;
我更希望它出现在一个声明中,而不是单独的声明中。
解决方案
如果多列之间没有重复值,并且空列使用 表示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 | | |
推荐阅读
- python - Django 回溯/无法从“typing_extensions”导入名称“TypeVarTuple”
- apache-flink - 这是 Flink-1.13.1 和 HiveCatalog 中的错误
- javascript - 在 Reactjs 中,Transitionend 触发函数两次
- ios - CoreData:当我们在两者之间进行批量更新操作时,是否可以模拟 SQLite 事务行为?
- android - 导航组件传递 args 类型 BigDecimal
- gcc - 无法编译我的 CentOS 系统的任何版本的 GCC
- subtitle - SRT 字幕的最大尺寸
- steam - 设置steam启动脚本
- mysql - 如何使用多个表作为单个 NOT IN 条件的值?
- python - Python IDLE 无法打开文件,提示“打开文件操作未能连接到打开和保存面板服务”