仅选择具有匹配对的行

时间:2017-02-20 22:44:52

标签: mysql sql database

我有一个MySQL表格如下

ID  SHEET_NUMBER    DAYS RESULT
1   55201           9   10
2   55209           28  25.5
3   55209           28  27.9
4   38558           7   12
5   38552           5   19
6   38559           5   5

我想只选择首先匹配的纸张编号和行数;只有当有一对匹配的28天标本时

所以,如果只有一天28天,它将不会选择任何东西,但是如果至少有2天28天它将获得两行

我完全迷失了,我知道我应该使用小组......但我不确定它的用途。

三江源

2 个答案:

答案 0 :(得分:3)

您可以尝试以下查询:

SELECT * 
FROM test
WHERE sheet_number IN (
    SELECT sheet_number
    FROM test
    WHERE days = 28
    GROUP BY sheet_number
    HAVING COUNT(*) >= 2
);

这里是 SQL Fiddle

答案 1 :(得分:1)

首先,编写一个查询sheet_number,其中包含两行或多行,days值为28。

  SELECT d.sheet_number
    FROM my_table_below d
   WHERE d.days = 28
   GROUP BY d.sheet_number
  HAVING COUNT(1) > 1

使用该查询,我们可以将其用作内联视图,并连接回原始表以查找匹配的行:

SELECT t.*
  FROM ( SELECT d.sheet_number
           FROM my_table_below d
          WHERE d.days = 28
          GROUP BY d.sheet_number
         HAVING COUNT(1) > 1
       ) m
  JOIN my_table_below t
    ON t.sheet_number = m.sheet_number
   AND t.days = 28 
 ORDER BY t.sheet_number, t.id

如果规范要返回t.days = 28的所有行,而不仅仅是sheet_number的行,则忽略外部查询的条件days=28。 (规范有点不清楚。)