[英]Joining table to union of two tables?
我有两个表: orders
和oldorders
。 两者的结构相同。 我想合并这两个表,然后将它们加入另一个表: users
。 以前,我只有orders
和users
,我试图将oldorders
拖到当前代码中。
SELECT u.username, COUNT(user) AS cnt
FROM orders o
LEFT JOIN users u
ON u.userident = o.user
WHERE shipped = 1
AND total != 0
GROUP BY user
这可以找到所有用户在表orders
已完成的非零订单总数,但是我想在orders
和oldorders
orders
oldorders
。 我该怎么做?
create table orders (
user int,
shipped int,
total decimal(4,2)
);
insert into orders values
(5, 1, 28.21),
(5, 1, 24.12),
(5, 1, 19.99),
(5, 1, 59.22);
create table users (
username varchar(100),
userident int
);
insert into users values
("Bob", 5);
输出为:
+----------+-----+
| username | cnt |
+----------+-----+
| Bob | 4 |
+----------+-----+
创建oldorders
表后:
create table oldorders (
user int,
shipped int,
total decimal(4,2)
);
insert into oldorders values
(5, 1, 62.94),
(5, 1, 53.21);
在两个表的联合上运行时,预期的输出是:
+----------+-----+
| username | cnt |
+----------+-----+
| Bob | 6 |
+----------+-----+
只是不确定在哪里或如何将工会塞进那里。 与其对orders
运行查询, orders union oldorders
对orders union oldorders
orders
运行查询。 可以假定两个表之间没有相交。
您只需要以这种方式进行union
:
SELECT u.username, COUNT(user) AS cnt
FROM
(
SELECT * FROM orders
UNION
SELECT * FROM oldorders
) o
LEFT JOIN users u ON u.userident = o.user
WHERE shipped = 1
AND total != 0
GROUP BY user;
首先在orders
和oldorders
orders
表之间使用UNION
获取合并的订单。
其余工作与您所做的完全相同。
注意:
在这种情况下, Left join
没有意义。 用户不存在的订单,那么您将获得NULL 0
作为输出。 这没有任何价值。
如果要为所有用户(包括可能尚未订购的用户) <user,total orders>
order>,那么您需要更改LEFT JOIN
的顺序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.