簡體   English   中英

如何基於列值聯接不同的表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM