所以我有一个情况,我有两张桌子。一个是基表(在此示例中称为_Keys
),具有唯一的主键。然后是另一个表,其中包含_Keys中每个id的多行数据(第二个表是Extra
)。
我需要为Extra中的_Keys中的每个主键选择最大值。我已经建立了一个SQLFiddle来模拟问题here。
这是我目前正在使用的查询,但问题是它只会为Extra表选择一个值,而不是每行一个值。
Select * from _Keys
LEFT JOIN
(Select * from Extra ORDER BY value2 DESC LIMIT 1) as e
ON e.id = _Keys.id;
对于我的示例SQL Fiddle,我使用了这个数据库模式:
CREATE TABLE _Keys(id int, value int);
INSERT INTO _Keys (id, value) VALUES (1, 5),(2, 3),(3, 4);
CREATE TABLE Extra(id int, value2 int);
INSERT INTO Extra (id, value2) VALUES (1, 3),(1, 1),(2, 4),(2, 6),(3, 3),(3, 5);
基本上我的结果是here。只有_Keys表中的第一行才能从第二个表中获取数据。
在MySQL中,如何为_Keys中的每一行从Extras中选择一行?
答案 0 :(得分:1)
您可以使用更好的效果尝试此查询:
SELECT k.id, MAX(e.value2) AS value2
FROM _Keys k
INNER JOIN Extra e
ON (k.id = e.id)
GROUP BY k.id;
答案 1 :(得分:1)
由于LIMIT,您的联接表Select * from Extra ORDER BY value2 DESC LIMIT 1
将只包含一行。试试这个:
Select * from _Keys
LEFT JOIN
(Select id, max(value2) from Extra group by id) as e
ON e.id = _Keys.id;
答案 2 :(得分:1)
我相信我明白你要做什么,但我不确定。
NULL
,您获得了LIMIT
个值,它只返回第一行。您还需要使用GROUP BY
。MAX
。试试这个。
SELECT * from _Keys
LEFT JOIN
(SELECT id, MAX(value2) AS value2 FROM Extra GROUP BY id) as e
ON e.id = _Keys.id;