這個SQL有什麼問題?它應該返回的結果,但沒有返回MySQL連接問題
SELECT `pid`
FROM `products`
LEFT JOIN `prods_to_features`
ON (`ptf_pid` = `pid`)
WHERE ( `ptf_id` = '66'
OR `ptf_id` = '67'
)
AND (`ptf_id` = '76')
它是不可能有第二個,其中已在左邊被用來子句表連接?
這個SQL有什麼問題?它應該返回的結果,但沒有返回MySQL連接問題
SELECT `pid`
FROM `products`
LEFT JOIN `prods_to_features`
ON (`ptf_pid` = `pid`)
WHERE ( `ptf_id` = '66'
OR `ptf_id` = '67'
)
AND (`ptf_id` = '76')
它是不可能有第二個,其中已在左邊被用來子句表連接?
正如其他人所說,WHERE子句是沒有意義的。
我會猜測你想要說的是你想要的產品具有功能-76和功能66-或-67。您將需要兩個連接爲:
SELECT DISTINCT products.pid
FROM products
JOIN prods_to_features AS ptf1 ON ptf1.ptf_pid=products.pid
JOIN prods_to_features AS ptf2 ON ptf2.ptf_pid=products.pid
WHERE ptf1.ptf_id='76'
AND ptf2.ptf_id IN ('66', '67')
的DISTINCT是保證返回的情況下,只有一個產品的拷貝,其中一個產品有兩個特點66和67
看看你的WHERE子句。
您不能同時有一個值爲(66 OR 67) AND 76
。每行都將爲表達式返回false,所以不會返回任何行。
該問題與您的加入無關。
您檢查
(`ptf_id` = '66' OR `ptf_id` = '67') AND (`ptf_id` = '76')
這是一樣的
(`ptf_id` = '66' AND `ptf_id` = '76')
OR (`ptf_id` = '67' AND `ptf_id` = '76')
這意味着ptf_id = 66 = 76
或ptf_id = 67 = 76
是,嗯,不太可能。
對我們這一代計算機來說不是不可能,但是不可能。與量子計算它可能;) – knittl 2010-05-17 14:46:07
...但我有頁面值得「證明」1 = 2 – 2010-05-17 14:46:46
問題是您要求它返回來自prods_to_features
的記錄,該記錄對於ptf_id
(Where子句中的AND
)有兩個不同的值。
我懷疑你的意思是pid
你的Where子句中的ptf_id
的一個或兩個。這取決於你想要做什麼。
你的布爾邏輯是有缺陷的。
WHERE(ptf_id = 66或67)和(ptf_id = 76)
這永遠不會工作。
如果您有任何問題像這樣,我建議從基礎開始並添加碎片直到它斷裂。例如,通過刪除整個where子句,顯而易見,加入正確運行 – 2010-05-17 14:48:39