的问题是表不具有平等的领域。那么这些字段的联合就无法应用。 - user3160725
如果你想在一个查询个人的款项,你能团结单独的查询到一个没有执行两个表之间的JOIN
。有很多方法可以做到这一点,你可以选择任何最有意义您:
个人款项如下:
SELECT SUM(c.field_init) FROM Cserv c; --x
SELECT SUM(g.filed_1) FROM Bserv g; --y
SELECT SUM(g.field_2) FROM Bserv g; --z
方法1.可以团结他们作为一个子查询主查询:
SELECT
(SELECT SUM(c.field_init) FROM Cserv c),
(SELECT SUM(g.filed_1) FROM Bserv g),
(SELECT SUM(g.field_2) FROM Bserv g);
在这里,您将在子查询中获得每个总和作为主查询中的一列。请注意,每个子查询必须只有一列和一行。
x y z
方法2.您可以通过聚合团结他们:
SELECT SUM(sum1), SUM(sum2), SUM(sum3) FROM (
(SELECT SUM(c.field_init) AS sum1, 0 AS sum2, 0 AS sum3 FROM Cserv c)
UNION ALL
(SELECT 0, SUM(g.filed_1), SUM(g.field_2) FROM Bserv g)
);
在这里,你收到此表的子查询:
sum1 sum2 sum3
x 0 0
0 y z
和总计中的款项主要查询:
sum1 sum2 sum3
x y z
方法3可以执行工会:
SELECT SUM(c.field_init) FROM Cserv c
UNION ALL
SELECT SUM(g.filed_1) FROM Bserv g
UNION ALL
SELECT SUM(g.field_2) FROM Bserv g;
在这种情况下,资金会在不同的行,但对单个列。您将不得不修改程序逻辑以分别读取每行并正确分配它们。
x
y
z
方法3只有在保证行顺序的情况下才能工作。为保证,你可以这样做,而不是执行以下操作:
SELECT 1, SUM(c.field_init) FROM Cserv c
UNION ALL
SELECT 2, SUM(g.filed_1) FROM Bserv g
UNION ALL
SELECT 3, SUM(g.field_2) FROM Bserv g;
结果造成:
1 x
2 y
3 z
那么你可以肯定比当第一列是2
,第二列载的g.filed_1
总和,等等上。
你说得对,但我该如何解决这个问题? – user3160725
@ user3160725查看已更新的答案 – Henry
问题是表中没有相同的字段。那么这些字段的联合就无法应用。 – user3160725