简体   繁体   中英

Joining 2 selects in one query

How can I join these 2 selects' in one query?

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;  

if you want to merge two results from two different queries you can use UNION syntax :

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;

this will return you one result table but your queries are too similar to each other , thus better option would be JOIN

You can try using 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;

Following can be one of the join query. But now depends whether you want a LEFT or RIGHT join accordingly you can modify the query.

Also you can change the sequence of whether to use tracking table first or sales order table first, to make it relevant to your business case.

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;

Do a double 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;

you need to run in this way:

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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