繁体   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