2014-11-21 97 views
-1

我有一个查询四个表。为了便于阅读,我将表格名称更改为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;" 

要排除我可能会在数据库中太多xLIMIT将跳过他们的错误,我只是有x一个记录。当使用AND ...时,仍会显示值为x的此记录。

可能有人请向我解释我的错误在哪里排除记录col4 = "x"


对于澄清:

我想从t1来选择。该数据应该在结果中显示1倍。从t1

行从t2t3得到附加数据(总是通过一个连接ID和每个t1只有一行 - 行)。如果t4.col4 = "x"那么整行不应该在结果中。

exampleT1 | exampleT2 | exampleT3 | asdf - >是

exampleT1 | exampleT2 | exampleT3 | x - >没了


第二个编辑:

如果我不把任何WHERE /,并与X/blablabla,这是结果(见最正确的coloumn这mischievious x):

enter image description here

当我使用X排除,我只是得到NULL - 但我想整个行消失

enter image description here

+0

正如目前所写,当col4为“x”时,到t4的连接将失败,但所有其他连接仍可能成功。如果将其更改为'WHERE'子句,则隐式地将该LEFT JOIN更改为INNER JOIN,而该值又不是“x”。目前还不清楚col4中的NULL是否在结果集中,或者不是? – 2014-11-21 15:12:29

+0

你确定t4.col4中没有特殊字符或空格吗?如果你设置了它,会发生什么=“x”你有没有得到任何记录?或“X”是否区分大小写?我的猜测是工作正常,列中的数据不符合你的期望。 – xQbert 2014-11-21 15:17:34

+0

将它切换到'='并不会改变结果的任何内容 - 我还查找了大小写敏感的东西。所以我认为Rowland是正确的...澄清:'t4'中不必有任何记录符合 - 这就是为什么我得到了'LEFT JOIN'。但如果't4'中有记录,我希望整行不会显示在结果中。 – Trollwut 2014-11-21 15:20:10

回答

1

NULL比较的结果也NULL,从而一个WHERE的条件,你隐式抛弃那些在t4没有记录的行,相反,你可以COALESCE始终有一个非空值来做比较,你总是会得到一个真正的结果。

因此,像:

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 
WHERE  COALESCE(t4.col4, '') <> 'x' 
LIMIT 10; 

在这种情况下,我已经合并到一个硬编码的空字符串,但你可以使用比“X”以外的任何值,它会为你工作需要。

+0

感谢您的贡献!不幸的是,它并没有改变我的结果,因为我想......我在末日问题中添加了第二个编辑来确保我的行为:如果最后一行('link')有一个邪恶的'x',我希望整行日期(在本例中为'NETFOR350_HHN'为ID)消失。 – Trollwut 2014-11-21 16:56:18

+0

你的屏幕截图显示了这个代码的行为,或者如果它是'WHERE'子句,就像我的例子那样? – 2014-11-21 17:20:21

+0

两者。你可以看到它就像你的代码,但我确实改变了“t”和“col”作为其他名字,因为它们已被用于清晰。还是我误解了某些东西? – Trollwut 2014-11-24 14:13:49