2010-03-12 26 views
1

我的數據庫中有三張桌子:蘋果,冰箱和房屋。每個蘋果都屬於一臺冰箱(它有一個引用它的冰箱的專欄),每臺冰箱都屬於一個房子。問題是,每個蘋果也屬於一個房子。我想這不是「正常化」或什麼,但它是這樣的。新手SQL加入問題:房屋,冰箱和蘋果

顯然,每個蘋果應該屬於它的冰箱所屬的房子。畢竟,蘋果一次不能在兩個不同的地方。

所以,我的問題是這樣的:什麼SQL語句可以讓我找到所有的「壞蘋果」,由於某種原因,錯誤地引用一個不同的房子,而不是他們應該在的冰箱。換句話說,我需要找到含有矛盾信息的蘋果。

我不知道這是否是一個「連接」問題,但我相信可能有一個非常簡單的方法來解決這個問題。我只是不知道它是什麼。謝謝你的幫助!

+0

所以這種關係是基於'APPLES'表中的'parent_ownership'列? – 2010-03-12 21:14:58

+2

爲什麼不正常化?明顯但令人討厭的答案是「標準化你的桌子,所以你沒有這個問題。」 – 2010-03-12 21:15:34

+0

好吧,看到我的工作是「修復它」,我必須做的一件事就是找到不好的數據,並確保蘋果放在正確的地方。 – 2010-03-12 21:22:37

回答

2
select a.* 
    from apples a 
    inner join refrigerators r 
    on a.refrigeratorid = r.refrigeratorid 
    where a.houseid != r.houseid 
2
SELECT a.* 
FROM apples a 
INNER JOIN fridge f 
ON f.appleID = a.appleID 
WHERE a.houseID <> f.houseID 

當然,這是一個糟糕的模式設計,但您似乎已經知道。

+1

我覺得'房子'沒有'appleID'列 – rodrigoap 2010-03-12 21:19:01

+0

你有這個倒退。 House不會有AppleID--取而代之的是Apple應該有一個HouseID。 – 2010-03-12 21:19:38