sql - 如何根据给定条件选择不同的记录?
问题描述
我在 MySQL 数据库中有下表:
| id | col | val |
| -- | --- | --- |
| 1 | 1 | y |
| 2 | 1 | y |
| 3 | 1 | y |
| 4 | 1 | n |
| 5 | 2 | n |
| 6 | 3 | n |
| 7 | 3 | n |
| 8 | 4 | y |
| 9 | 5 | y |
| 10 | 5 | y |
现在我想明确选择所有value
相似 scol
等于的记录y
。我尝试了以下两个查询:
SELECT DISTINCT `col` FROM `tbl` WHERE `val` = 'y'
SELECT `col` FROM `tbl` GROUP BY `col` HAVING (`val` = 'y')
但这并没有按照我的预期进行。我希望结果如下所示:
| col |
| --- |
| 4 |
| 5 |
但1
也包含在我的查询结果中。谁能帮我建立正确的查询?据我了解,我可能需要创建一个派生表,但不能完全找出正确的路径。
解决方案
你很接近,第二个查询。相反,比较最小值和最大值:
SELECT `col`
FROM `tbl`
GROUP BY `col`
HAVING MIN(val) = MAX(val) AND MIN(`val`) = 'y';
推荐阅读
- python - 如何报告异常以备后用
- javascript - TypeError: _Model2.default.aggregate(...).forEach 不是函数
- java - 使用 Aspose 库将分数作为文本插入 Excel
- oracle - DATAGRID - Oracle 日期属性
- javascript - 代码冗余使其更快?
- css - 本地托管时不显示 Google 字体
- css - 如何在 Angular Material 6 中为选项卡应用自定义样式?
- mysql - 如何永久禁用 MySQL 8 中的列统计信息?
- python - 当 NA 为有效值时检测 CSV 文件截断
- ldap - Hyperledger Fabric-ca 连接到 LDAP 目录