好的,我有一个数据库,并建立了这样的查询
http://sqlfiddle.com/#!2/c03e8/11
然而,对于我的世界来说,我无法弄清楚如何达到我的最终目标,那就是隐藏第十行,因为那一行有"tamed" = 1
谁能给我指出正确的方向?
发布于 2014-05-19 20:34:29
简单,只需选择您的选择,并添加一个额外的地方
SELECT id, name, level, location, tamed
FROM (
-- your inside select here
) as temp
WHERE temp.tamed <> 1发布于 2014-05-19 20:47:50
使用下面的查询.第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`;编辑:
在posted花式查询中,将第二个左联接更改为如下所示,第10行的tammed列也将是NULL。否则,按照其他答案中的建议,选择外部选择。
LEFT JOIN  `info_types` 
ON `t1_info`.`type_id` = `info_types`.`id`
AND `t1_info`.`type_id` != 3https://stackoverflow.com/questions/23746708
复制相似问题