[英]How to JOIN on different tables based on column value
廣告表
截圖http://img90.imageshack.us/img90/6295/adsvo.png
手機桌
截圖http://img194.imageshack.us/img194/3713/phones.png
汽車表
截圖http://img35.imageshack.us/img35/1035/carsm.png
我有3桌廣告,汽車和電話。
我想加入表格是基於ads表格中的類別。
我嘗試了這個查詢,但是沒有運氣,有幫助嗎?
SELECT *
FROM `ads`
JOIN `ads.category` ON `ads.id` = `ads.category.id`
**我無法在您的任何帖子中添加評論,但是我希望它可以根據ads表中的類別自動添加評論。
例如:-如果表中有電話類別,我將自動加入電話表,然后
SELECT *
FROM `ads`
JOIN `phone` ON `ads.id` = `phone.id`
如果表中有汽車類別,我會自動加入汽車表
SELECT *
FROM `ads`
JOIN `cars` ON `ads.id` = `cars.id`
買車:
SELECT *
FROM ads JOIN cars ON ads.ID = cars.ID
取得電話:
SELECT *
FROM ads JOIN phones ON ads.ID = phones.ID
要使兩者都使用UNION:
SELECT ads.ID, ads.Title, ads.Desc, ads.category, 'Car' AS AdType, cars.Year AS Col1, cars.cc AS Col2, cars.transmission AS Col3
FROM ads JOIN cars ON ads.ID = cars.ID
UNION ALL SELECT ads.ID, ads.Title, ads.Desc, ads.category, 'Phone' AS AdType, phone.Model AS Col1, phone.Color AS Col2, '' AS Col3
FROM ads JOIN phones ON ads.ID = phones.ID
注意:我建議您在汽車和電話表中設置外鍵,以引用ads.ID,而不要使用子表的ID字段(主鍵?)
SELECT ads.*,
cars.year, cars.cc, cars.transmission,
phones.model, phones.color
FROM ads
LEFT JOIN cars
ON cars.id = ads.id
LEFT JOIN phones
ON phones.id = ads.id
盡管我同意@Scrum,但是您可以不加入它們,然后(在您的代碼中)使用類型字段並檢索正確的列。
我也覺得這些列應該為NULLABLE,並且都在一個表中。 我看不到以1-1關系(和直接鍵關系)將它們分開的意義。 這當然不是規范化(我可以看到)。 也許我很累又無能為力
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.