簡體   English   中英

缺少外鍵時如何使用默認值 - mysql

[英]How to use default value when foreign key is missing - mysql

我有兩張這樣的桌子

  • 銷售(item_id,seller_id,價格);
  • 賣家(身份證、姓名、地址);

sale表中的一些記錄可能包含seller_id在seller表中不存在的記錄。

例如:

銷售表:

item_id 賣家ID 價格
1 100 55
2 101 33
3 101 44

賣家表:

ID 姓名 地址
101 13 條
102 55 hs.xxx
103 安東尼 無添加

我想用賣家的名字查詢所有的銷售額。 如果賣家不存在,則使用默認名稱或為空。 該查詢的結果表如下所示:

item_id 賣家名稱
1
2
3

我嘗試使用條件sale.seller_id = seller.id加入表格,但它刪除了賣家不存在的項目

  • 這可以使用COALESCE(val_1, val_2, val_3, ...val_n)優雅地實現,它被描述為COALESCE() function 返回列表中的第一個非空值。

  • 只需將target_column替換為COALESCE(target_column, default_value)

  • 把它們放在一起,你可以做類似的事情。

     select item_id, COALESCE(name, '') as seller_name from sale left join seller on sale.seller_id = seller.id;
  • 注意:如果您想使用其他值作為默認值,請將空單引號替換為“默認名稱”

  • 在這里閱讀更多-> https://www.w3schools.com/mysql/func_mysql_coalesce.asp

好吧,所以我認為這應該不會太糟糕。 您可以使用LEFT JOIN獲得第三個表中描述的行為。 這是LEFT JOIN的示例。

對於您自己的筆記,我使用此在線 MySQL 實例進行了此操作,但這應該可以與 MySQL 的其他實例一起使用。

我重新創建了下面的表格,我相信這給了我你所擁有的。 由於我們對id字段和seller_id字段不匹配的情況感興趣,因此我們實際上可以在此處添加任意數量的示例,只要少數在Seller表中缺少一兩個字段即可。

CREATE TABLE Sale(item_id integer, seller_id integer, price integer);
INSERT INTO Sale(item_id, seller_id, price) VALUES
    (1, 100, 55), 
    (2, 101, 33),
    (3, 101, 44);

CREATE TABLE Seller(id integer, name varchar(20), addr varchar(20));
INSERT INTO Seller(id, name, addr) VALUES
    (101, "Ann", "13 str"),
    (102, "Ben", "55 hs.xxx"),
    (103, "Anthony", "no add");

從這里,您只需執行左連接即可獲得您想要的表格。 我還用CASE替換了 name 變量,當返回 NULL 時,用您選擇的名稱替換NULL

SELECT Sale.item_id, 
    CASE WHEN Seller.name is NULL THEN "Default name" ELSE Seller.name END AS seller_name
FROM Sale
LEFT JOIN Seller
ON Sale.seller_id = Seller.id;

這將返回給我們一個包含賣家感興趣的項目的表格,並且由於Seller中缺少條目, item_id=1的 Seller_id 有一個seller_id字段。

編輯因為我還沒有足夠的聲譽來發表評論:Harsh 的解決方案看起來更干凈,但我會留下我的,以防它對你仍然有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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