通过比较保持id相同的多个行来选择行值

时间:2012-07-22 10:29:12

标签: mysql

这是我的表格数据,我希望通过比较多行来找到特定的ID ..

onetsoc_code    element_id   data_value

11-1011.00      1.B.1.a      1.33
11-1011.00      1.B.1.b      2.00
11-1011.00      1.B.1.c      2.67
11-1011.00      1.B.1.d      3.67
11-1011.00      1.B.1.e      7.00
11-1011.00      1.B.1.f      5.33
11-1011.00      1.B.1.g      5.00
11-1011.00      1.B.1.h      6.00
11-1011.00      1.B.1.i      0.00
11-1021.00      1.B.1.a      1.33
11-1021.00      1.B.1.b      1.33
11-1021.00      1.B.1.c      1.00
11-1021.00      1.B.1.d      3.33
11-1021.00      1.B.1.e      7.00
11-1021.00      1.B.1.f      3.67
11-1021.00      1.B.1.g      5.00
11-1021.00      1.B.1.h      6.00
11-1021.00      1.B.1.i      4.00
11-1031.00      1.B.1.a      1.00
11-1031.00      1.B.1.b      3.67
11-1031.00      1.B.1.c      3.67
11-1031.00      1.B.1.d      4.67
11-1031.00      1.B.1.e      7.00

这是我的表,所以我想要那些 onetsoc_code 所在的

1.B.1.g      5.00
1.B.1.h      6.00
1.B.1.i      4.00

如果您查看表格,那么您会发现 11-1021.00 是我想要的结果。

所以这就是我想要你的理由1.B.1.a到1.B.1.f.我只想一次比较三行,并希望与这些数据相关联的单个 onetsoc_code

1.B.1.g,1.B.1.h,1.B.1.i的行可用于所有 onetsoc_code ,所以我只需要那些 onetsoc_code ,再次具有上述条件,

1.B.1.g      5.00
1.B.1.h      6.00
1.B.1.i      4.00

1 个答案:

答案 0 :(得分:2)

您可以按onetsoc_code进行分组,并过滤​​包含三条DISTINCT条记录的论坛:

SELECT   onetsoc_code
FROM     mytable
WHERE    (element_id = '1.B.1.g' AND data_value = 5.00)
      OR (element_id = '1.B.1.h' AND data_value = 6.00)
      OR (element_id = '1.B.1.i' AND data_value = 4.00)
GROUP BY onetsoc_code
HAVING   COUNT(DISTINCT element_id, data_value) = 3

sqlfiddle上查看。

当然,如果保证唯一性,可以节省DISTINCT操作的费用,而只需使用普通的COUNT(*)