我需要将2个表格与相同的ID组合在一起,但我不能
SELECT stat.user_id, user.username,
SUM(stat.vertrag) AS vertrag,
SUM(stat.zubehoer) AS zubehoer,
SUM(stat.privat) AS privat,
SUM(stat.service) AS service,
SUM(stat.bs_vertrag) AS bus
FROM statistics stat
join users user on stat.user_id = user.uid
WHERE stat.user_id != '0' AND stat.datum LIKE '%$month%'
GROUP BY stat.user_id
UNION
SELECT bew.user_id, stat.user_id, user.username,
SUM(case when bew.log = 'inv_imei'
THEN
1
ELSE
0
END) AS inv
FROM user_bewegungen bew
JOIN users user ON user.uid = bew.user_id
JOIN statistics stat ON bew.user_id = stat.user_id
WHERE bew.date LIKE '%$month%'
GROUP BY bew.user_id
ORDER BY vertrag DESC
我现在不知道怎么走.....
第一个选择是完美的,并且有效。现在我添加了一个联合因为我需要添加行" log"。 Id也在其中,但我成了错误
使用的SELECT语句具有不同的列数
有人可以帮忙吗?
答案 0 :(得分:2)
每个select语句需要具有相同的列数。你的第一个有7:
SELECT
stat.user_id,
user.username,
SUM(stat.vertrag) AS vertrag,
SUM(stat.zubehoer) AS zubehoer,
SUM(stat.privat) AS privat,
SUM(stat.service) AS service,
SUM(stat.bs_vertrag) AS bus
你的第二个有4:
SELECT
bew.user_id,
stat.user_id,
user.username,
SUM(case when bew.log = 'inv_imei' THEN 1 ELSE 0 END) AS inv
您可以在第二个NULL
中为那些不在第一个列中的列选择SELECT
。
答案 1 :(得分:1)
使UNION的两个操作数同构。根据需要重命名列和/或创建NULL值虚拟列,以使它们具有相同的形状。例如,如果我们想要形成UNION:
SELECT a, b, c
FROM table1
和
SELECT d, e
FROM table2
我们会在逻辑上将那些相同类型的列配对(在这种情况下,让我们假设a
和e
属于同一类型,而{{1} }和b
属于同一类型)并添加一个额外的NULL值列作为右侧SELECT的第三个投影属性,如下所示:
d
如果这种方法看起来令人困惑,您可以使用表视图来简化表达式。在前面的示例中,您可以在table2上声明一个视图:
SELECT b, a, c
FROM table1
UNION
SELECT d AS b, e AS a, NULL as c
FROM table2
然后将您的UNION制定为:
CREATE VIEW t2view( b, a, c )
AS
SELECT d, e, NULL
FROM table2
答案 2 :(得分:0)
在UNION
中,字段编号应相同。使用方式如下:
SELECT stat.user_id, 0, user.username, ....
SELECT bew.user_id, stat.user_id, user.username, ...
或使用别的东西,你知道的,那里是一个缺失的领域。
数据类型也应该相同。
答案 3 :(得分:0)
您正在使用MySQL Union。
UNION is used to combine the result from multiple SELECT statements into a single result set.
The column names from the first SELECT statement are used as the column names for the results returned. Selected columns listed in corresponding positions of each SELECT statement should have the same data type. (For example, the first column selected by the first statement should have the same type as the first column selected by the other statements.)
参考:MySQL Union
您的第一条选择语句有7列,第二条语句有4列。 在两个语句中,您应具有相同的列数和相同的顺序。 否则会显示错误或错误数据。
答案 4 :(得分:0)
您可以看到此示例
select 'row1' as column1,'row2' as column2
union
select 'row3' as column11,'row4' as column222
如果更改列数,则意味着在第一个查询中选择2列,在第二个查询中使用3列,则将出现错误(使用的SELECT语句具有不同的列数)。
select 'row1' as column1,'row2' as column2
union
select 'row3' as column11,'row4' as column222 ,'rr' as t ;
运行两个查询,您会发现差异。