2012-05-18 45 views
1

我有這個非常簡單的查詢。我無法弄清楚爲什麼我的查詢沒有返回空記錄。查詢不發出空記錄

SELECT table1.name, table2.name 
FROM table 
LEFT OUTER JOIN table2 
ON table1.id = table2.id 
WHERE table1.someid='2' 
AND table2.someid=2 
ORDER BY table1.order 

我也嘗試使用左加入,加入,內部加入,完全外加入給出了一個錯誤。

這個簡單的查詢返回所有需要的值。

SELECT table1.name 
FROM table 
WHERE table1.someid='2' 
ORDER BY table1.order 
+2

請提供樣本數據和期望的輸出。 – RedFilter

+1

你提到了一個錯誤 - 你得到了什麼錯誤?是否存在與table1.someid = 2 AND table2.someid = 2相同的記錄,就像在查詢中一樣?你的桌子結構是什麼樣的? – nealio82

+0

Oracle樣式(隱式)連接是INNER JOIN。 –

回答

1

無論您將放在where子句中,都會強制結果集返回受影響表中的行。

在你的情況下,你要求table2.someid = 2,這對於mysql來說意味着table2必須返回一行,不管有沒有左連接。

解決方法:使用左內該過濾器聯接,而不是在where子句

1

你需要弄清楚你想要哪個表搜索「2」。用你的兩個子句,你基本上把它變成一個INNER JOIN查詢。你需要搜索一個表或其他。

有意義嗎?


SELECT 
    table1.name, 
    table2.name 
FROM 
    table 
LEFT JOIN 
    table2 
    ON table1.id = table2.id 
WHERE 
    table1.someid = '2' 

-- This clause is basically turning this query into an inner join. 
-- AND 
--  table2.someid = 2 

ORDER BY 
    table1.order 
+0

考慮修復混合的JOIN類型。你有'SELECT table1.name,table2.name',這是一個INNER JOIN,和一個顯式的LEFT OUTER JOIN。 –

1

你的語法是錯誤的...

檢查此琴:http://sqlfiddle.com/#!2/c368d/1

我已經寫了這對你來說,也許它可以幫助。

SELECT table1.name, table2.cute 
FROM table1 INNER JOIN table2 ON table1.id_table1 = table2.id_table1 
ORDER BY table1.name