我有三个表customers
,orders
,payments
我试图通过他对订单使用的不同订单和付款方式来获取客户内部联接的记录。
例如
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
我的查询是否正常还是我还需要提及我的数据库结构吗?
答案 0 :(得分:2)
你错过了那里的关系。您的orders
和payments
需要以某种方式链接在一起,我假设两个表中都应该有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的主键加入第三个表。