2010-06-19 117 views
1

我這3下表幫助連接查詢

table ads 
... 
categoryID 
subcategoryID 


table category 
categoryID 
description 

table subcategory 
subCategoryID 
description 

我怎樣才能將這個3臺有從ADS和類別描述,也說明子類別所有現場...

(當我使用SQL服務器,我可以「設計」的關係,但現在,我使用MySQL和我沒有一個圖形環境做到這一點..我不好寫SQL)

THanks提前

回答

2
SELECT 
    ads.*, 
    c.description as categoryDescription, 
    sc.description as subcategoryDescription, 
FROM 
    ads 
    INNER JOIN category c ON c.categoryID = ads.categoryID 
    INNER JOIN subcategory sc ON sc.subcategoryID = ads.subcategoryID 

注意:它是更好的做法是使用顯式列列表,而不是「*」

1
SELECT ads.categoryID, 
     ads.subcategoryID, 
     category.description AS category, 
     subcategory.description AS subcategory 
FROM ads 
    JOIN category ON ads.categoryID = category.categoryID 
    JOIN subcategory ON ads.subCategoryID = subcategory.subCategoryID 

我避免在原則上使用ads.*

+0

OP要求「廣告的所有字段」:-) – richsage 2010-06-19 12:10:01

+2

我絕不會在生產查詢中使用'*';這只是海報暗示在桌面廣告比顯示更多的領域... – 2010-06-19 12:12:21

+0

@Mitch @richsage我沒有挖掘我只是解釋爲什麼我避免了它! – 2010-06-19 12:23:17

1
SELECT 
    ads.*, 
    category.description AS categorydescription, 
    subcategory.description AS subcategorydescription 
FROM ads 
INNER JOIN category ON ads.categoryID = category.categoryID 
LEFT JOIN subcategory ON ads.subcategoryID = subcategory.ID 

如果您的「廣告」記錄只存在於頂級類別中,而不存在於子類別中,我已將該子類別留作左連接。如果您的「廣告」記錄是總是在一個子類別中,然後將其切換到內部聯接。

這個假設也讓廣告只在一個單一的類別和子類別

0
SELECT a.`categoryID`,a.`subcategoryID`,c.`description` AS catDesc,s.`description` AS subCatDesc FROM `ADS` a 
INNER JOIN `category` c ON a.`categoryID`=c.`categoryID` 
INNER JOIN `subcategory` s ON a.`subcategoryID`=s.`subCategoryID` 

這SQL應該這樣做,你可以通過subCatDesc通過catDesc訪問類別表描述中,subcategorys描述中,的categoryID目前通過categoryID和子類別ID subcategoryID