mysql multiple join查询没有返回所需的输出

时间:2015-08-25 11:36:57

标签: mysql join

我有三个表customersorderspayments

我试图通过他对订单使用的不同订单和付款方式来获取客户内部联接的记录。

例如

customer_name  Order_status  Payment_method 
David          shipped       CASH
David          cancelled     CHEQUE

当我运行查询时,它重复记录三次,结果也不像我在上面的例子中提到的那样。

这是查询。

 SELECT cust_name
      , order_status
      , pay_method 
   FROM customer 
  INNER JOIN order_tbl ON customer.cust_id = order_tbl.cust_id 
  INNER JOIN payments ON payments.cust_id = order_tbl.cust_id

我的查询是否正常还是我还需要提及我的数据库结构吗?

3 个答案:

答案 0 :(得分:2)

你错过了那里的关系。您的orderspayments需要以某种方式链接在一起,我假设两个表中都应该有order_id列?

SELECT cust_name
    , order_status
    , pay_method 
FROM    customer 
        INNER JOIN order_tbl 
            ON customer.cust_id = order_tbl.cust_id 
        INNER JOIN payments 
            ON  payments.cust_id = order_tbl.cust_id 
            AND payments.order_id = orders_tbl.order_id --<<--- this line here is missing

如果您没有这种类型的链接,您如何在逻辑上将付款链接到订单 - 因为这将是您缺少的链接。

答案 1 :(得分:0)

您正在获取重复记录,因为条件匹配,MySQL没有任何问题,它会根据您的要求返回结果。您是否检查了重复记录的ID以确保它们不同?它可能是具有不同支付ID的相同记录,因此它肯定会返回与关系存在的每条记录相关的客户和订单记录。如果您希望根据某些条件使查询不同,则可以使用DISTINCT(THE_FIELD)

我根据您提供的信息回答您对项目的了解有限。正如上面评论中所提到的,更多信息可以得到更好的答案。

答案 2 :(得分:0)

您可能错过了使用order_tbl的主键加入第三个表。