[英]Oracle SQL Developer - transpose table leaving multiple rows for the same ID
[英]Oracle: how to compare multiple rows in sql developer and make sure they are the same?
我的下表如下:
League_id League_name Team_id Team_name
257 Copa America 11111 ABC
122 Brazil A 11111 ABC
135 La Liga 987 FC Barca
129 Copa Del Rey 987 *FC Barca Football
*Notice that there each team could play in different leagues
我想對Team_name
列進行完整性檢查,並確保Team_name
在所有聯賽中都相同。 即FC Barca Football
應該被標記,因為它與另一個聯賽中的FC Barca
不同。
進行此檢查的最佳方法是什么?
以下錯誤消息應產生:對於聯賽:西甲(135)和西班牙杯(129),“ Team_ID的Team_Name差異= 987”
謝謝,
解決此問題的適當方法是不在該表中存儲team_name
。 team_name
列屬於team
表(我假設其中的team_id
是主鍵)。 實際上,在league_name
也不應該在這個表either--它應該是在league
表,其中league_id
是主鍵。
所以你真的需要三張桌子
CREATE TABLE league(
league_id NUMBER PRIMARY KEY,
league_name VARCHAR2(100) NOT NULL
);
CREATE TABLE team(
team_id NUMBER PRIMARY KEY,
team_name VARCHAR2(100) NOT NULL
);
CREATE TABLE team_league(
team_league_id NUMBER PRIMARY KEY,
team_id NUMBER REFERENCES team( team_id ),
league_id NUMBER REFERENCES league( league_id ),
CONSTRAINT uk_team_league UNIQUE( team_id, league_id )
);
然后,您可以創建一個視圖,以生成您在此處呈現的數據
SELECT l.league_id, l.league_name,
t.team_id, t.team_name
FROM league l
JOIN team_league tl on (l.league_id = tl.league_id)
JOIN team t on (tl.team_id = t.team_id)
您可以使用team_id和團隊名稱創建一個單獨的表(團隊)。 對此施加唯一約束。 然后將League表與League_id,League_name,Team_id一起放置。
因此,當您執行查詢時,可以從teams表中提取team_name,從而減少了為每個team_id允許多個團隊名稱的冗余性。
我建議您將表格標准化。
換一種說法:
創建一個具有ID和團隊名稱列的TEAM表。 創建一個帶有ID和聯賽名稱列的LEAGUE表。
一個聯盟可以包含許多球隊,而一個團隊可以包含許多聯賽。 因此,應將此建模為多對多關系。
即創建一個帶有聯賽編號和球隊編號字段的TEAM_LEAGUE表
這種建模避免了該問題,因為給定團隊現在有了一個唯一的團隊名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.