MySQL:链接两次到同一个表但不同的行

时间:2017-05-07 17:13:51

标签: mysql sql pivot-table

我有两张桌子T1和T2。 T1和T2之间存在1:n的关系。

CREATE TABLE T1 (
  PK INT
  /* more columns here */
);

CREATE TABLE T2 (
  PK INT,
  T1_PK INT,
  Active INT,
  Rank INT
  /* more columns here */
);

INSERT INTO T1 VALUES (1);
INSERT INTO T1 VALUES (2);
INSERT INTO T1 VALUES (3);

INSERT INTO T2 VALUES (1, 1, 1, 20);
INSERT INTO T2 VALUES (2, 1, 0, 15);
INSERT INTO T2 VALUES (3, 1, 0, 10);
INSERT INTO T2 VALUES (4, 1, 0, 5);

INSERT INTO T2 VALUES (5, 2, 1, 16);
INSERT INTO T2 VALUES (6, 2, 0, 11);
INSERT INTO T2 VALUES (7, 2, 0, 6);

INSERT INTO T2 VALUES (8, 3, 1, 7);

因此T1中的每一行都有:
- T2中1个相应的行,其中Active = 1 - 在T2中0到n对应的行,其中Active = 0

T2中的Rank列包含应用程序UI中最终用户排序的值。

这是我目前的简单查询:

   SELECT T1.PK, T2.Active, T2.Rank
     FROM T1
LEFT JOIN T2 ON T1.PK = T2.T1_PK
    WHERE T2.Active = 1

返回此结果集:

PK      Active  Rank
1       1       20
2       1       16
3       1       7

这样就可以了。

现在我想在同一结果集中得到Active = 0和MIN(Rank)的行值:

PK      Active  Rank    Active  Rank
1       1       20      0       5
2       1       16      0       6
3       1       7       null    null

我玩了第二次JOIN,子查询,GROUP BY和HAVING,但无济于事。

请注意,上述代码段可以复制到http://sqlfiddle.com并可以使用。

0 个答案:

没有答案