我有一个查询四个表。为了便于阅读,我将表格名称更改为t
,将颜色更改为col
。为什么我的AND或WHERE子句不起作用?
如果我不添加倒数第二行,则查询按照应该的方式运行。尼斯。
但是,当我想排除其中col4
的值为x
的条目时,它不起作用。当使用AND ...
它似乎只是忽略了AND ...
。在使用WHERE ...
时,我得到一个空的结果。
SELECT t1.col1,
t2.col2,
t3.col3,
t4.col4
FROM t2ble1 t1
LEFT JOIN t2ble2 t2
ON t1.col1 = t2.col1
LEFT JOIN table3 t3
ON t3.col1 = t1.col1
LEFT JOIN table4 t4
ON t4.col1 = t1.col1
AND t4.col4 <> "x"
LIMIT 10;"
要排除我可能会在数据库中太多x
我LIMIT
将跳过他们的错误,我只是有x
一个记录。当使用AND ...
时,仍会显示值为x
的此记录。
可能有人请向我解释我的错误在哪里排除记录col4 = "x"
?
对于澄清:
我想从t1
来选择。该数据应该在结果中显示1倍。从t1
行从t2
和t3
得到附加数据(总是通过一个连接ID和每个t1
只有一行 - 行)。如果t4.col4 = "x"
那么整行不应该在结果中。
exampleT1 | exampleT2 | exampleT3 | asdf
- >是
exampleT1 | exampleT2 | exampleT3 | x
- >没了
第二个编辑:
如果我不把任何WHERE /,并与X/blablabla,这是结果(见最正确的coloumn这mischievious x):
当我使用X排除,我只是得到NULL - 但我想整个行消失:
正如目前所写,当col4为“x”时,到t4的连接将失败,但所有其他连接仍可能成功。如果将其更改为'WHERE'子句,则隐式地将该LEFT JOIN更改为INNER JOIN,而该值又不是“x”。目前还不清楚col4中的NULL是否在结果集中,或者不是? – 2014-11-21 15:12:29
你确定t4.col4中没有特殊字符或空格吗?如果你设置了它,会发生什么=“x”你有没有得到任何记录?或“X”是否区分大小写?我的猜测是工作正常,列中的数据不符合你的期望。 – xQbert 2014-11-21 15:17:34
将它切换到'='并不会改变结果的任何内容 - 我还查找了大小写敏感的东西。所以我认为Rowland是正确的...澄清:'t4'中不必有任何记录符合 - 这就是为什么我得到了'LEFT JOIN'。但如果't4'中有记录,我希望整行不会显示在结果中。 – Trollwut 2014-11-21 15:20:10