我想知道是否有人可以帮助我进行这个复杂的MySQL查询。
我有3个表:
表#1:Customer_Order
具有两列customer_id
和order_id
表2:Order_Payment
也具有order_id
表#3:Orders
具有id
,它是订单ID。
我正在徘徊,如果可以根据order_id
从特定客户那里检索所有付款。我只有order_id
,但我没有customer_id
,并且基于order_id
,我应该能够检索所有付款,甚至还没有支付的付款。
这就是我的方式:
我首先检索已知的顺序
从customer_order中选择 * wery_id = 1351
然后,我尝试根据返回的内容来构建查询
选择 * 选择 *来自customer_order where order_id = 1351)C1左加入 (选择op.order_id,customer_id来自order_payment op op innect )c2上的c1.customer_id = c2.customer_id
我也尝试
从(从 从` where order_payment.order_id = 1351 订单by" create_at" ass)as s s s内部加入客户s.customer_id = cunituder.id
,但我只得到一笔订单,而不是尚未支付的订单。
如果有人会帮助我解决问题的解决方案。
您可以与customer_order
连接两次。从给定的order_id
转到customer_id
后,第二次获得所有客户的订单。
select op.*
FROM order_payment AS op
JOIN customer_order AS co1 ON co1.order_id = op.order_id
JOIN customer_order AS co2 ON co2.customer_id = co1.customer_id
WHERE co2.order_id = 1351
我认为没有任何理由使用LEFT JOIN
。order_payment
中的列应该是外键,因此总会有匹配项。
类似的东西应该有效:
SELECT
co.*,
op.*
FROM
customer_order AS co
LEFT JOIN order_payment AS op ON op.order_id = co.order_id
WHERE
co.customer_id IN
(
SELECT customer_id FROM customer_orders WHERE order_id=1351
)
我最终运行了2个查询。首先加载已完成特定订单付款然后为该客户加载未付订单的客户。
感谢大家的帮助。