[英]multiple joins to two tables holding fk's
我正面临一种奇怪的行为,我必须将其解释为错误,鉴于计算机始终严格执行您告诉他们的操作,因此我必须告诉它错误的信息:)
用例:
我有一个名为orders_details
的表,该表包含感兴趣的列,包括外键, order_id
和product_id
。
我也有一个名为orders
的表,它具有order_id
的PK
,还有一个名为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.