用于从两个表进行数据合并的SQL查询

时间:2017-02-07 07:33:24

标签: mysql sql database database-design

以客户表为例

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值作为付款。

1 个答案:

答案 0 :(得分:-1)

实际上是相反的连接:

   Select * from payments p 
   left join customers c 
       on p.customer_id = c.id