select 有条件地与 mysql 中的条件联接
select conditionally with conditional joins in mysql
我正在尝试加入两个 tables,人员和销售人员,并根据应该用于加入 tables 的 where 条件显示结果。
我目前的尝试只显示一个结果,但我希望显示人员中的所有行,无论他们是否有销售记录 table,如果他们有记录并且类型是credit 那么我只想显示金额。
CREATE TABLE people(
person_id INTEGER NOT NULL PRIMARY KEY
,name VARCHAR(6) NOT NULL
);
INSERT INTO people(person_id,name) VALUES (1,'John');
INSERT INTO people(person_id,name) VALUES (2,'Alice');
INSERT INTO people(person_id,name) VALUES (3,'Mary');
CREATE TABLE sales(
sales_id INTEGER NOT NULL PRIMARY KEY
,customer_id VARCHAR(6) NOT NULL
,type VARCHAR(6) NOT NULL
,amount VARCHAR(6) NOT NULL
);
INSERT INTO sales(sales_id,customer_id,type,amount) VALUES (1,1,'credit',100);
INSERT INTO sales(sales_id,customer_id,type,amount) VALUES (2,3,'cash',200);
请使用我当前的代码检查 fiddle example 并帮助我获得如下所示的结果:
+---------+--------+
| name | amount |
+---------+--------+
| john | 100 |
| alice | 0 |
| mary | 0 |
+---------+--------+
那就是:
select p.name, coalesce(s.amount, 0) as amount
from people p
left join sales s on s.customer_id = p.person_id and s.type = 'credit'
与原始代码的主要区别在于 left join
ed table 上的条件位于连接的 on
端,而不是 where
条款,因此它避免过滤掉没有销售的人。
另请注意 table 别名的使用,它缩短了查询,coalesce()
显示“缺失”金额的 0
而不是 null
。
我正在尝试加入两个 tables,人员和销售人员,并根据应该用于加入 tables 的 where 条件显示结果。
我目前的尝试只显示一个结果,但我希望显示人员中的所有行,无论他们是否有销售记录 table,如果他们有记录并且类型是credit 那么我只想显示金额。
CREATE TABLE people(
person_id INTEGER NOT NULL PRIMARY KEY
,name VARCHAR(6) NOT NULL
);
INSERT INTO people(person_id,name) VALUES (1,'John');
INSERT INTO people(person_id,name) VALUES (2,'Alice');
INSERT INTO people(person_id,name) VALUES (3,'Mary');
CREATE TABLE sales(
sales_id INTEGER NOT NULL PRIMARY KEY
,customer_id VARCHAR(6) NOT NULL
,type VARCHAR(6) NOT NULL
,amount VARCHAR(6) NOT NULL
);
INSERT INTO sales(sales_id,customer_id,type,amount) VALUES (1,1,'credit',100);
INSERT INTO sales(sales_id,customer_id,type,amount) VALUES (2,3,'cash',200);
请使用我当前的代码检查 fiddle example 并帮助我获得如下所示的结果:
+---------+--------+
| name | amount |
+---------+--------+
| john | 100 |
| alice | 0 |
| mary | 0 |
+---------+--------+
那就是:
select p.name, coalesce(s.amount, 0) as amount
from people p
left join sales s on s.customer_id = p.person_id and s.type = 'credit'
与原始代码的主要区别在于 left join
ed table 上的条件位于连接的 on
端,而不是 where
条款,因此它避免过滤掉没有销售的人。
另请注意 table 别名的使用,它缩短了查询,coalesce()
显示“缺失”金额的 0
而不是 null
。