簡體   English   中英

在一個查詢中加入 2 個選擇

[英]Joining 2 selects in one query

如何在一個查詢中加入這 2 個選擇?

SELECT st.tracking_id FROM sale_order_line_tracking AS st, sale_order_line AS sol 
WHERE st.order_line_id = sol.id
AND sol.id in %s;

SELECT rsolp.pack_id from rp_sale_order_line_pack AS rsolp, sale_order_line AS sol
WHERE rsolp.sale_line_id = sol.id
AND sol.id in %s;  

如果要合並來自兩個不同查詢的兩個結果,可以使用UNION語法:

SELECT st.tracking_id FROM sale_order_line_tracking AS st, sale_order_line AS sol 
WHERE st.order_line_id = sol.id
AND sol.id in %s
UNION
SELECT rsolp.pack_id from rp_sale_order_line_pack AS rsolp, sale_order_line AS sol
WHERE rsolp.sale_line_id = sol.id
AND sol.id in %s;

這將返回一個結果表,但您的查詢彼此太相似,因此更好的選擇是JOIN

您可以嘗試使用 JOIN

SELECT st.tracking_id,rsolp.pack_id
FROM sale_order_line_tracking AS st join sale_order_line AS sol 
on st.order_line_id = sol.id join rp_sale_order_line_pack AS rsolp
on rsolp.sale_line_id = sol.id
AND sol.id in %s;

以下可以是連接查詢之一。 但是現在取決於您是否想要 LEFT 或 RIGHT 連接,因此您可以修改查詢。

您還可以更改是先使用跟蹤表還是先使用銷售訂單表的順序,以使其與您的業務案例相關。

SELECT st.tracking_id,rsolp.pack_id
    FROM sale_order_line_tracking AS st Join sale_order_line AS sol 
        on st.order_line_id = sol.id 
        Join rp_sale_order_line_pack AS rsolp on rsolp.sale_line_id = sol.id
WHERE sol.id in %s;

做一個雙LEFT JOIN

SELECT sol.*, st.tracking_id, rsolp.pack_id
FROM sale_order_line AS sol 
LEFT JOIN sale_order_line_tracking AS st
    ON st.order_line_id = sol.id
LEFT JOIN rp_sale_order_line_pack AS rsolp
    ON rsolp.sale_line_id = sol.id
WHERE sol.id in %s;

你需要以這種方式運行:

SELECT st.tracking_id FROM sale_order_line_tracking AS st, sale_order_line AS sol 
WHERE st.order_line_id = sol.id
AND sol.id in %s
UNION
SELECT rsolp.pack_id from rp_sale_order_line_pack AS rsolp, sale_order_line AS sol
WHERE rsolp.sale_line_id = sol.id
AND sol.id in %s;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM