你所遇到的稱爲「笛卡爾積(Cartesian product)」(一張表中的每條記錄都與另一張表中的每條記錄相連)。當你連接表時沒有指定任何「ON」或(適當的)「WHERE」條件時會發生什麼情況。
如果不知道常用字段將三個表連接在一起,我將使用a.id並假定auctioneersloc和auctioneerscont表中存在名爲「auctioneers_id」的foriegn關鍵字段。但是,你想要的東西,看起來像這樣:
SELECT DISTINCT a.id,a.name
FROM auctioneers a
INNER JOIN auctioneersloc al ON al.auctioneers_id = a.id
INNER JOIN auctioneerscont ac ON ac.auctioneers_id = a.id
WHERE a.email LIKE "%[email protected]%"
OR ac.email LIKE "%[email protected]%"
ORDER BY name
當然,如果你的「拍賣」表中的行不要求在「auctioneersloc」匹配行或「auctioneerscont」表,那麼你應該使用LEFT JOIN(而不是INNER JOIN)。
關於更多的個人風格筆記,我嘗試總是明確指定我的JOIN。簡單地列出FROM子句中的所有表,但它依賴於WHERE子句來指定您的JOIN條件。從應用程序開發的角度來看,這可能是不好的,如果在構建查詢字符串時發生了WHERE子句,那麼您將得到一個Cartesian產品。始終記住指定JOIN關鍵字應該可以幫助您避免意外的CP。
感謝您的幫助。完美工作。不幸的是,儘管我喜歡MySQL,並且很喜歡它,但我已經閱讀了聯接並基本理解了它們,但它們對我來說似乎仍然是巫術,就像許多MySQL像外鍵等一樣。 :( 再次感謝。 – 2012-01-09 19:51:32