繁体   English   中英

希望通过合并这些查询在一个查询中获得两个查询的结果

[英]Want to get results of two queries in one single query by merging these queries

所以,我有两个表,一个是 A(order_id, order_group_id, name),第二个是 B(order_group_id, paid)。

表A有几条记录:

order_id | order_group_id | name
----------------------------------
1        | 0              | A
----------------------------------
2        | 14             | B
----------------------------------
3        | 0              | C
----------------------------------
4        | 15             | D

表B有几条记录:

order_group_id | paid
--------------------------
14             | 0              
--------------------------
15             | 1

现在我正在运行这两个查询:

SELECT order_id FROM A WHERE order_group_id = 0

SELECT d.order_id FROM A as d, B as e WHERE d.order_group_id = e.order_group_id AND e.paid = 0

第一个查询给出order_id 13

第二个查询给出order_id 2

那么,现在如何在一个查询中获得这两个查询的结果,这些order_id也应该按升序排列。

您可以使用LEFT JOIN实现它

此查询将返回所有paid is 0order_group_id is 0的记录

SELECT order_id, e.paid,  d.order_group_id FROM A as d
LEFT JOIN B as e ON d.order_group_id = e.order_group_id
WHERE e.paid = 0 OR d.order_group_id = 0

codeignitor中,您可以通过以下方式实现

$query = $this->select('SELECT order_id, e.paid,  d.order_group_id')->from('A as d')->join('B as e','d.order_group_id = e.order_group_id','LEFT')->where('e.paid = 0 OR d.order_group_id = 0')->get();

演示: http ://sqlfiddle.com/#!9/2b82f9/8

SELECT order_id FROM A WHERE order_group_id = 0
union
SELECT d.order_id FROM A as d, B as e WHERE d.order_group_id = e.order_group_id AND e.paid = 0

您可以使用 INNER JOIN 关联两个或多个表。 并使用 ORDER BY (column) ASC/DESC 进行升序或降序

SELECT order_id FROM A as d INNER JOIN B as e 
ON d.order_group_id = e.order_group_id
WHERE d.order_group_id = 0 AND e.paid = 0
ORDER BY order_id ASC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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