2014-11-21 26 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