繁体   English   中英

多个联接到两个持有fk的表

[英]multiple joins to two tables holding fk's

我正面临一种奇怪的行为,我必须将其解释为错误,鉴于计算机始终严格执行您告诉他们的操作,因此我必须告诉它错误的信息:)

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

我也有一个名为orders的表,它具有order_idPK ,还有一个名为product_details的表,它具有product_id列的PK

要求 :

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

我试过了

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,我的原始查询确实对示例数据有效,感谢您将我指向正确的位置来仔细检查自己

您给定的查询在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM