多个连接到两个表格,包含fk' s

时间:2014-07-22 06:02:15

标签: mysql join left-join

我面临着一种奇怪的行为,我必须解释错误,鉴于计算机总是按照你告诉他们的方式执行,我必须说错了:)

用例:
我有一个名为orders_details的表,它包含感兴趣的列,包括外键order_idproduct_id

我还有一个名为orders的表格PK order_id和一个名为product_details的表PK product_id }专栏。

要求:

选择所有订单及其各自的订单明细和产品详细信息。

我尝试了什么:

SELECT ord.shipping_ids, ord.order_id, ord.firstname, ord.lastname, ord.order_id,
ord.payment_id, det.product_id, ord.timestamp, prd.product

FROM  `cscart_orders` AS ord  

LEFT JOIN cscart_order_details AS det ON ord.order_id = det.order_id

LEFT JOIN cscart_product_details AS prd ON prd.product_id = det.product_id

现在,所有product_details列的结果都是 null ,因此我无法获得所需内容。

如果我将第二个连接替换为内连接,我会得到损坏的数据(每行的多个副本没有我注意到的任何逻辑顺序)。

那么,我错过了什么?这不是连接应该如何工作?

编辑:

http://sqlfiddle.com/#!2/f98463/2 -sqlfiddle,从来不知道sql存在一个小提琴,抱歉没有首先发布它。

第二次编辑:

我的数据库表有数据完整性问题:(有人没有正确设置FK和PK, 我的原始查询确实对样本数据起作用,感谢您将我指向正确的地方进行双重检查

1 个答案:

答案 0 :(得分:0)

您的给定查询在sql小提琴上工作正常如果您给出预期输出,那么我们可以帮助您。

SELECT ord.shipping_ids, ord.order_id, ord.firstname, ord.lastname, ord.order_id,
ord.payment_id, det.product_id, ord.timestamp, prd.product

FROM  `cscart_orders` AS ord  

LEFT JOIN cscart_order_details AS det ON ord.order_id = det.order_id

LEFT JOIN cscart_product_details AS prd ON prd.product_id = det.product_id