表格:
|A | |B | |C |
|-----| |-----|-----| |-----|-----|-----------|--------|
|AKey | |BKey |AKey | |CKey |BKey |Date |Result |
|-----| |-----|-----| |-----|-----|-----------|--------|
|1 | |1 |1 | |101 |1 |2016-12-01 |F |
| | |2 |1 | |102 |1 |2016-12-01 |F |
| | |3 |1 | |103 |3 |2016-12-01 |P |
| | | | | |104 |1 |2016-12-01 |P |
我尝试过这个 SQL 命令:
SELECT a.Akey, b.BKey, c.CKey, Date, Result
FROM A AS a
INNER JOIN B as b ON a.AKey=b.AKey
LEFT JOIN (SELECT * FROM C WHERE Date="2016-12-01"
ORDER BY CKey DESC
LIMIT 0, 1) AS c ON c.BKey=b.BKey
WHERE a.AKey=1
我得到的结果如下:
|AKey |BKey |CKey |Date |Result |
|-----|-----|-----|-----------|--------|
|1 |1 |104 |2016-12-01 |P |
|1 |2 |NULL |NULL |NULL |
|1 |3 |NULL |NULL |NULL |
但是,如何得到如下结果?
|AKey |BKey |CKey |Date |Result |
|-----|-----|-----|-----------|--------|
|1 |1 |101 |2016-12-01 |P |
|1 |2 |NULL |NULL |NULL |
|1 |3 |103 |2016-12-01 |P |
最佳答案
你可能想要这样的东西:
SELECT a.Akey, b.BKey, c2.CKey, c2.Date, c2.Result
FROM A AS a
INNER JOIN B as b ON a.AKey=b.AKey
LEFT JOIN (
SELECT MIN(CKey) AS min_CKey, BKey
FROM C
WHERE Date = "2016-12-01"
GROUP BY BKey
) AS c ON c.BKey = b.BKey
LEFT JOIN C AS c2 ON c.BKey = c2.BKey AND c.min_CKey = c2.CKey
WHERE a.AKey=1 AND c2.Date = "2016-12-01"
您必须使用 GROUP BY
子句才能获取每个 BKey
的最小 CKey
值。然后再次加入 C
表以获取其余字段。
关于mysql - MYSQL 中的 SELECT INNER JOIN SELECT by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41118155/