我想从3个连接的表中拉多个列,但我想结果集只包含一个不同的“数据条目”每p
。 id
(在数据输入表中是外部关键字的宠物ID)。我遇到的问题是,可能有两个数据条目,编号为1和2,属于一个宠物 - 查询必须选择最高数字的数据条目 - 这就是为什么我试图使用max和group by,但它不起作用。任何人都可以看到我要去哪里错了吗?非常感谢尝试连接表,并选择一个不同的最大值
SELECT `p`.`id`, `o`.`id`, `o`.`email`, MAX(d.number), `d`.`number`
FROM (`pets` AS `p`, `owners` AS `o`, `data_entries` AS `d`)
WHERE `p`.`owner_id` = `o`.`id`
AND `p`.`id` = `d`.`pet_id`
GROUP BY `p`.`id`
ORDER BY `d`.`number` DESC
编辑:以下iniju的建议,我想下面的查询,但这并不不是筛选出的数据项,其中数字是比相同的宠物另一个数据项下:
SELECT `p`.`id`, `o`.`id`, `o`.`email`, `d`.`number`
FROM (`pets` AS `p`, `owners` AS `o`, `data_entries` AS `d`)
WHERE `p`.`owner_id` = `o`.`id`
AND `p`.`id` = `d`.`pet_id`
GROUP BY `p`.`id`, `o`.`id`, `o`.`email`, `d`.`number`
HAVING `d`.`number`=MAX(`d`.`number`)
实际上,您应该删除'd'。'数字'都来自SELECT和GROUP BY – iniju 2010-08-12 22:15:10
嗨iniju - 我已经更新了您的建议查询,但我需要过滤掉任何具有相同pet_id的结果 - 我的意思是只选择data_entry与最高的号码 – franko75 2010-08-12 22:20:27
哦,我现在看到。然后在两个位置保留'd'。'编号',并在GROUP BY部分后添加以下内容: HAVING'd'.'number' = MAX(d.number) – iniju 2010-08-12 22:57:57