非耦合的產品清單。我不是在SQL好,我碰到過,我不知道如何解決的一個問題。我已經閱讀並重新閱讀了一本關於SQL的書(O'Reilly的Learning SQL),希望它能包含我需要的信息,但我還沒有找到它。SQL:獲取使用MySQL 4
我的問題如下。我將用一個簡化的例子來使討論更容易。
我有三個表,汽車,RIM和兩個組合:carRim。
car
carId
description
rim
rimId
description
carRim
carRimId
carId
rimId
price
在表carRim我有價格的一個額外的屬性,因爲輪輞的價格是每個型號的車可能不同。我有一個限制,就是每種類型的輪輞只能與每種類型的汽車配對一次。所以所有的車圈組合都應該是獨一無二的。
如果我想的邊緣添加到車,我需要一個尚未耦合到汽車輪的列表。爲此,我認爲我需要輪輞表和carRim表,分別列出輪輞的總列表和已經連接到我想要添加輪輞的車的carRim的列表。
我寫的(簡單)查詢,使輪輞是是連接到特定的汽車名單,在下面的例子中車carId 9
SELECT
*
FROM
rims
INNER JOIN
carRims
ON
carRims.rimId = rim.rimId
WHERE
carRims.carId = 9
但現在我需要還沒有連接到特定汽車的輪輞清單。問題是,如果我做一個左外部連接,我得到的列表是「污染」了其他車的輪輞耦合,所以「WHERE carRims.carId IS NULL」的過濾條件不起作用。
SELECT
*
FROM
rims
LEFT OUTER JOIN
carRims
ON
carRims.rimId = rim.rimId
WHERE
carRims.carId IS NULL
另一個挑戰是,我不能使用任何新的語法與MySQL 5,如子查詢,因爲我的客戶是使用MySQL 4此時無法升級。
可以爲這個問題的查詢在MySQL 4寫的,我懷疑它可以。
謝謝!
對於「污染」與其他車輛的輪輞聯軸器。在這個例子中,我看不到任何主信息,它定義了哪些輪輞可以與哪些汽車相關聯。現在它只被定義爲輪輞,汽車和輪輞汽車關係中的價格。你能解釋一下,你想如何保存這些信息,以保證你的結果不被污染。 –
任何車輪都可以連接到任何車輛,但只能連接一次。 carRim表中的連接(自然)。 –
您的查詢將受益於鏈接表上的'(carId,rimID)''PRIMARY KEY'。 – Quassnoi