[英]How to use default value when foreign key is missing - mysql
我有两张这样的桌子
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.