簡體   English   中英

Oracle:如何在sql developer中比較多個行並確保它們相同?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM