我有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 |
+----+-------------+------+---------+
我希望我已經很好地解釋了這夠了,但請告訴我是否需要添加更多細節。
我真的很感激這方面的一些指導,在此先感謝:)
是否要排除代碼位於Exclude表中的行,或者如果代碼存在於Exclude表中,您希望位置爲Null嗎? – Sonam
嗨索南,謝謝你的迴應。我需要排除行和Geoffrey的建議,在我的AND中使用NOT IN,並且製作了一些快樂的日子。 –