【发布时间】:2018-06-01 19:22:55
【问题描述】:
我想得到一个结果,其中可以为第 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 */
【问题讨论】: