mysql LEFT JOIN查询,其中max为最大值

时间:2014-05-19 20:30:56

标签: mysql

好的,所以我有一个数据库和一个像这样构建的查询

http://sqlfiddle.com/#!2/c03e8/11

然而,我不能为我的世界弄清楚如何达到我的最终目标,就是隐藏第十行,因为那个人有"tamed" = 1

有人请指出我正确的方向吗

2 个答案:

答案 0 :(得分:1)

简单的只需选择你的选择并添加一个额外的地方

SELECT id, name, level, location, tamed
FROM (
-- your inside select here
) as temp
WHERE temp.tamed <> 1

答案 1 :(得分:1)

使用以下查询...第10行消失了。从where子句中删除条件并添加到连接条件。另外,我的第一个加入类型是INNER JOIN,而不是LEFT JOIN。因此,当条件不匹配时,该行将根本不返回。 您在http://sqlfiddle.com/#!2/835b3b/28

点击了我更新的查询
SELECT  `t1` . * , MAX(
CASE WHEN  `info_types`.`name` =  "level"
THEN  `t1_info`.`value`
ELSE NULL
END ) AS  "level", 
MAX(
CASE WHEN  `info_types`.`name` =  "location"
THEN  `t1_info`.`value`
ELSE NULL
END ) AS  "location", 
MAX(
CASE WHEN  `info_types`.`name` =  "tamed"
THEN  `t1_info`.`value`
ELSE NULL
END ) AS  "tamed"
FROM `t1` 
INNER JOIN  `t1_info` 
ON  `t1`.`id` =  `t1_info`.`t1_id`
AND `t1`.`id` !=10
LEFT JOIN  `info_types` 
ON `t1_info`.`type_id` = `info_types`.`id`
and `t1_info`.`value` !=1       
GROUP BY  `t1`.`id`;

修改

在您发布的小提琴查询中,将第二个左连接更改为如下所示,第10行的tammed列也将为NULL。否则,按照其他答案中的建议选择外部选择。

LEFT JOIN  `info_types` 
ON `t1_info`.`type_id` = `info_types`.`id`
AND `t1_info`.`type_id` != 3