2011-12-30 108 views
1

我有這樣一個說法SQL語句包括缺少的屬性

表A

ID X 
1  x1 
2  x2 
3  x3 

表B

ID AttributeName  AttributeValue 
1  Type    some 
2  not    nothing 
3  Type    other 

我現在要像

1,x1,some 
2,x2,'' 
3,x3,other 

的SQL結果

SELECT TableA.ID, TableA.X, TableB.AttributeValue 
FROM TableA, TableB 
WHERE TableA.ID = TableB.ID AND TableB.AttributeName = 'Type' 

給出了所有帶X和TypeDescription的ID,其中屬性類型存在。 但我也希望沒有包含Type的ID - 如何達到?

+0

你在TableB中有一行ID = 2嗎?如果沒有,請將其從問題中刪除 – gbn 2011-12-30 14:07:32

+0

@gbn我認爲你沒有理解 – 2011-12-30 14:09:13

+1

這個問題可能是這樣,但「存在行但不存在」類型「和」沒有行存在「之間可能存在語義差異。 – gbn 2011-12-30 14:12:21

回答

3

你需要一個外部聯接:

SELECT TableA.ID, TableA.X, TableB.AttributeValue 
FROM TableA 
LEFT OUTER JOIN TableB ON TableA.ID = TableB.ID AND TableB.AttributeName = 'Type' 

這將返回一個NULL,而不是一個空字符串''爲ID = 2。如果您需要一個空字符串,請使用coalesce。在SQL Server上,它看起來像這樣:

SELECT TableA.ID, TableA.X, COALESCE(TableB.AttributeValue, '') 
FROM TableA 
LEFT OUTER JOIN TableB ON TableA.ID = TableB.ID AND TableB.AttributeName = 'Type'