以客户表为例
CREATE TABLE customer (
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20));
CREATE TABLE payments (
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
customer_id INT(11),
month INT(2),
year INT(4),
amount INT(5),
FOREIGN KEY fk_cust(customer_id)
REFERENCES customer(id));
付款表包含有关客户的月,年和付款金额的信息。
我在编写SELECT查询时遇到问题。 结果应包含所有客户的特定年份的所有月份,如果客户未在特定月份付款,则该月的付款列应为NULL。
SELECT * FROM customers c
LEFT JOIN payments p ON c.id = p.customer_id AND p.year = 2017
如果我运行上述查询,我只会获得有付款月份的行。
我提前为任何错误道歉(我是MySQL和StackOverflow的新手)。
编辑: 查询应返回付款不存在的月份的条目。例如, 如果客户仅在6月份付款,则查询应返回其他月份的条目,并将NULL值作为付款。
答案 0 :(得分:-1)
实际上是相反的连接:
Select * from payments p
left join customers c
on p.customer_id = c.id