http://sqlfiddle.com/#!2/c03e8/11
然而,我不能为我的世界弄清楚如何达到我的最终目标,就是隐藏第十行,因为那个人有"tamed" = 1
有人请指出我正确的方向吗
答案 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