我面临着一种奇怪的行为,我必须解释错误,鉴于计算机总是按照你告诉他们的方式执行,我必须说错了:)
用例:
我有一个名为orders_details
的表,它包含感兴趣的列,包括外键order_id
和product_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, 我的原始查询确实对样本数据起作用,感谢您将我指向正确的地方进行双重检查
答案 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