mysql - SQL 查询仅获取所有请求的 2 列匹配发生的结果
问题描述
我想得到一个结果,其中可以为第 2 列和第 3 列的三个(或更多)组合找到第 1 列的值(成对?)示例...这是一个包含 3 列的假设表:
水果 | 特质 | 描述 ------------------------------------------- 苹果 | 颜色 | 红色的 苹果 | 形状 | 圆形的 梨 | 表面 | 光滑的 梨 | 茎| 红色的 葡萄| 高分辨率照片| CLIPARTO 形状 | 圆形的 葡萄| 高分辨率照片| CLIPARTO 颜色 | 红色的 葡萄| 高分辨率照片| CLIPARTO 表面 | 光滑的
我想找到形状=圆形、颜色=红色、表面=光滑的水果。上表中的结果应该是“葡萄”,但我试图找出正确的 sql 查询,我无法缩小范围。我买苹果,因为它是红色的,我买梨,因为它很光滑。但我不想要那些。我想要一种能够显示所有三个特征/描述值的水果。
我已经走到了这一步,认为有一种方法可以使用组,并且我使用了子查询 - 认为这会给我一种要求的方法。但它仍然没有给我带来“葡萄”的结果。
SELECT fruit /* DISTINCT ?*/ FROM table1 WHERE fruit
IN (SELECT fruit FROM table1 WHERE trait = 'shape' AND described = 'round')
AND (SELECT fruit FROM table1 WHERE trait = 'color' AND described = 'red')
AND (SELECT fruit FROM table1 WHERE trait = 'surface' AND described = 'smooth')
HAVING count(fruit) = 3 /* or whatever number of trait/described combos were searched for */
解决方案
你离得太近了。只需继续从您的子句中选择水果,不要担心计数 - 您使用 DISTINCT 也是正确的
SELECT DISTINCT FRUIT FROM Table1
WHERE FRUIT IN (SELECT FRUIT FROM Table1 WHERE TRAIT = 'shape' AND DESCRIBED = 'round')
AND FRUIT IN (SELECT FRUIT FROM Table1 WHERE TRAIT = 'color' AND DESCRIBED = 'red')
AND FRUIT IN (SELECT FRUIT FROM Table1 WHERE TRAIT = 'surface' AND DESCRIBED = 'smooth')
推荐阅读
- python-3.x - 关于change()函数的一个小问题,如何理解它的过程?
- python - 使用 Flask 返回格式化的文本文件
- jenkins - 将每个阶段数据从jenkins管道推送到influx db时如何修复java.io.NotSerializable异常?
- android - Flutter:安装依赖于代码魔术失败
- java - 如何将分布式查询 API(如 Criteria API 或分布式 Sql 查询)与 IMap 以外的任何数据结构一起使用?
- spring-boot - 从项目文件夹加载 CSS、图像时出现问题
- javascript - 使用复选框交换 div 元素内内容的位置
- oracle - 如何在 Oracle 存储过程中打印异常名称?
- c++ - 包含 OpenCV 头文件的 C++ 程序的交叉编译失败
- python - 使用python将数据框上传到谷歌表格时出错?