iT邦幫忙

0

如何將資料表中部份項目進行分組?

  • 分享至 

  • xImage

現有一資料表 codes 記錄有哪些 code:

id code department
1 a A
2 a B
3 b A
4 c A

其中有部分 code 比較特殊,所以會另外分組出來。
我建立了一個資料表 code_group 來記錄有哪些 code 是需要另外分組出來的:

code
a
b

我想要表達兩資料表關聯性,所以試著在資料表 codes 設定欄位 code 為外鍵,參考 code_groupcode 欄位:

ALTER TABLE codes
ADD CONSTRAINT fk_code
FOREIGN KEY (code) REFERENCES code_group(code);

但我發現這樣行不通,因為 codes 資料表的 code 欄位有部份內容未存在於 code_group 資料表,違反外鍵限制。
請問有何建議?謝謝。

alien663 iT邦研究生 4 級 ‧ 2023-06-29 15:46:28 檢舉
把所有code都存到另一個table,然後多個欄位辨別"特殊code",這樣滿足foreign key,又滿足判斷特殊code
froce iT邦大師 1 級 ‧ 2023-06-30 08:02:34 檢舉
不要加外鍵就好。
你這個就只是要分組,然後把特別的組別結果篩出來,除非你還有一張表示拿來紀錄所有組別的,codes和code_group 都參照所有組別的再做外鍵。
但這樣我會再建議你乾脆紀錄所有組別,要特別篩選的多個欄位去記就好。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
whitefloor
iT邦研究生 2 級 ‧ 2023-06-29 16:05:52

因為我不知道你有沒有其他設計
所以我現在的理解是你因為 code_group 的 data 缺少導致 codes 在做 reference 的時候出現問題
但是 code_group 是後來新增的
所以你應該是先下 query 從 codes 找到所有 code
在 insert 到 group_code
最後才新增 FK

https://www.runoob.com/sql/sql-insert-into-select.html

0
海綿寶寶
iT邦大神 1 級 ‧ 2023-06-29 18:16:42

不要建 foreign key

外來鍵是一個(或數個)指向另外一個表格主鍵的欄位。外來鍵的目的是確定資料的參考完整性 (Referential Integrity)。換言之,只有被准許的資料值才會被存入資料庫內。

建立 foreign key 的目的
就是要確保「這個 table 裡的欄位必須存在於那個 table」
請參考這篇寫得很清楚的範例

如果你還是堅心要建 foreign key 來表示關聯性
那麼就

ALTER TABLE code_group
ADD CONSTRAINT fk_code
FOREIGN KEY (code) REFERENCES codes(code);
看更多先前的回應...收起先前的回應...

加個欄位,特殊就寫特殊,其他就寫平凡普通,不就好了.

其實都加另一個資料表了
平凡就存在平凡資料表;特殊就存特殊資料表,也可以
/images/emoticon/emoticon25.gif

就像之前我那篇便當的雞腿跟排骨,一個雞腿表,一個排骨表,多簡單.
有些是喜歡單表,然後用1代表雞腿,2代表排骨.然後有一天遇到另外
的2代表雞腿的,要交換資料時就麻煩了....

https://ithelp.ithome.com.tw/upload/images/20230630/20001787AacnRLouCF.png

我要發表回答

立即登入回答