2013-08-23 78 views
0

我有3個表,位置查找以及與以下信息排除...的MySQL查詢加入3個表

位置表

+----+--------------+ 
| id | location  | 
+----+--------------+ 
| 1 | Location a | 
| 2 | Location b | 
| 3 | Location c | 
| 5 | Location d | 
| 6 | Location e | 
| 7 | Location f | 
| 8 | Location g | 
| 9 | Location h | 
+----+--------------+ 

查找表

+----+-------------+------+ 
| id | location_id | code | 
+----+-------------+------+ 
| 1 | 2   | PR6 | 
| 2 | 2   | PR7 | 
| 3 | 2   | PR9 | 
| 4 | 5   | WA2 | 
| 6 | 8   | WA3 | 
+----+-------------+------+ 

排除表

+----+-------------+------+ 
| id | location_id | code | 
+----+-------------+------+ 
| 1 | 2   | PR5 | 
| 2 | 2   | PR8 | 
+----+-------------+------+ 

這些表存在基本郵政編碼查詢。我需要創建一些SQL,因此可以使用郵編完成搜索,但我需要考慮任何排除的郵編,例如,如果我要搜索「PR7」,我會得到「位置B」作爲結果但如果我要搜索PR5或PR8,我不會得到「位置B」,因爲它們位於排除表中。以下是我迄今爲止....

SELECT 
lookup.*, exclude.`code` as exclude, location.location 
FROM lookup 
LEFT JOIN 
exclude 
ON lookup.location_id = exclude.location_id 
LEFT JOIN 
location 
ON location.location = lookup.location_id 
WHERE lookup.`code` LIKE 'PR%' AND (exclude.`code` NOT LIKE 'PR8%' OR ISNULL(exclude.`code`)) 
GROUP BY location.location 
ORDER BY location.id 

在我上面的SQL,用戶鍵入「PR8」,這是被送到那裏使用條款PHP變量,我期待爲第1的2個字母在查找表中輸入郵政編碼,然後我也試圖查找用戶在排除表中輸入的內容,以便從結果中省略。不幸的是我不能告訴我要去的地方錯了,我正在那裏爲基於上述表格我應該得到任何結果,由於排除了以下結果...

+----+-------------+------+---------+ 
| id | location | code | exclude | 
+----+-------------+------+---------+ 
| 1 | Location b | PR8 | PR5  | 
+----+-------------+------+---------+ 

我希望我已經很好地解釋了這夠了,但請告訴我是否需要添加更多細節。

我真的很感激這方面的一些指導,在此先感謝:)

+0

是否要排除代碼位於Exclude表中的行,或者如果代碼存在於Exclude表中,您希望位置爲Null嗎? – Sonam

+0

嗨索南,謝謝你的迴應。我需要排除行和Geoffrey的建議,在我的AND中使用NOT IN,並且製作了一些快樂的日子。 –

回答

0

我想你使用 「NOT IN」。

所以你的「和」一詞更像

AND lookup.`code` NOT IN (SELECT 'code' FROM exclude) 

編輯 我敢肯定這會工作,不知道最好的表現,我會留給聰明的人比我

SELECT 
lookup.*, location.location 
FROM lookup 
LEFT JOIN 
location 
ON location.id = lookup.location_id 
WHERE lookup.`code` LIKE 'PR%' 
AND lookup.`code` NOT IN (SELECT `code` FROM exclude) 
GROUP BY location.location 
ORDER BY location.id 
+0

根據http://stackoverflow.com/a/3083665/2237306我猜不可能是要走的路。 –

+0

嗨傑弗裏,感謝您對此的幫助:)我已經測試了NOT IN,正如您所建議的那樣,它現在似乎工作正常,即使您鏈接到的帖子表示NOT IN也不是要走的路。謝謝你,我過去2個小時一直在進行這個查詢,你的先生是救命的人。 –

0

看到了這麼多,這可能幫助你

三表連接語法SQL 下面是一個普通的SQL查詢語法加入三個或更多表格。這個SQL查詢應該適用於所有主要的關係數據庫MySQL和甲骨文,微軟的SQLServer,Sybase和PostgreSQL的:

SELECT t1.col, t3.col FROM table1 join table2 ON table1.primarykey = table2.foreignkey 
            join table3 ON table2.primarykey = table3.foreignkey 

see more details here

+0

他沒有要求語法,請先閱讀問題。 – Sonam