Обсуждение: Phantom record problem.
I am experiencing a problem whereby when I submit a query containing an
aggregate, and if the WHERE clause is not satisfied, I receive a result
of "(1 row)", but that row is blank.
Here is an example:
Table 1: Customers
Name | UID
----------------------
Andrews | 1
Smith | 2
Jones | 3
Baker | 4
Table 2: Deposits
UID | Amount
----------------------
3 | 7.00
1 | 15.00
1 | 10.00
2 | 8.00
3 | 20.00
Now, if I submit the following query:
SELECT name, sum(amount)
FROM customers c, deposits d
WHERE c.uid = d.uid and c.uid = 3
GROUP BY name;
I get back:
name | sum
--------------------
Jones | 27.00
(1 row)
Fine, this looks good.
BUT, if I submit the following query:
SELECT name, sum(amount)
FROM customers c, deposits d
WHERE c.uid = d.uid and c.uid = 5
GROUP BY name;
(note that there is no record where c.uid=5) I would not expect any rows
back. However, I get:
name | sum
--------------------
|
(1 row)
Is this a bug, or is it supposed to work this way? I've tried this on
both versions 6.5.2 and 6.5.3 with the same result.
Any insight would be appreciated. Thank-you.
Cheers,
Richard
I think that is suppose to happen when no records are returned. But I must admit that it would be more meaningful, to return a 0 instead of an empty string. Poul L. Christiansen Richard wrote: > I am experiencing a problem whereby when I submit a query containing an > aggregate, and if the WHERE clause is not satisfied, I receive a result > of "(1 row)", but that row is blank. > > Here is an example: > > Table 1: Customers > > Name | UID > ---------------------- > Andrews | 1 > Smith | 2 > Jones | 3 > Baker | 4 > > Table 2: Deposits > > UID | Amount > ---------------------- > 3 | 7.00 > 1 | 15.00 > 1 | 10.00 > 2 | 8.00 > 3 | 20.00 > > Now, if I submit the following query: > > SELECT name, sum(amount) > FROM customers c, deposits d > WHERE c.uid = d.uid and c.uid = 3 > GROUP BY name; > > I get back: > > name | sum > -------------------- > Jones | 27.00 > (1 row) > > Fine, this looks good. > > BUT, if I submit the following query: > > SELECT name, sum(amount) > FROM customers c, deposits d > WHERE c.uid = d.uid and c.uid = 5 > GROUP BY name; > > (note that there is no record where c.uid=5) I would not expect any rows > back. However, I get: > > name | sum > -------------------- > | > (1 row) > > Is this a bug, or is it supposed to work this way? I've tried this on > both versions 6.5.2 and 6.5.3 with the same result. > > Any insight would be appreciated. Thank-you. > > Cheers, > Richard
hi I don't think so. Because there is a difference between a sum where the result is equal to zero (for example 1+2-3 =0 or 0+0 =0 ) and a sum of row that does not exist (here where the uid = 5). With this sum, the row return is null but the result exist (1 row) because the sum is done. i hope i was clear... "Poul L. Christiansen" a écrit : > I think that is suppose to happen when no records are returned. > > But I must admit that it would be more meaningful, to return a 0 instead of > an empty string. > > > Poul L. Christiansen > > Richard wrote: > > > I am experiencing a problem whereby when I submit a query containing an > > aggregate, and if the WHERE clause is not satisfied, I receive a result > > of "(1 row)", but that row is blank. > > > > Here is an example: > > > > Table 1: Customers > > > > Name | UID > > ---------------------- > > Andrews | 1 > > Smith | 2 > > Jones | 3 > > Baker | 4 > > > > Table 2: Deposits > > > > UID | Amount > > ---------------------- > > 3 | 7.00 > > 1 | 15.00 > > 1 | 10.00 > > 2 | 8.00 > > 3 | 20.00 > > > > Now, if I submit the following query: > > > > SELECT name, sum(amount) > > FROM customers c, deposits d > > WHERE c.uid = d.uid and c.uid = 3 > > GROUP BY name; > > > > I get back: > > > > name | sum > > -------------------- > > Jones | 27.00 > > (1 row) > > > > Fine, this looks good. > > > > BUT, if I submit the following query: > > > > SELECT name, sum(amount) > > FROM customers c, deposits d > > WHERE c.uid = d.uid and c.uid = 5 > > GROUP BY name; > > > > (note that there is no record where c.uid=5) I would not expect any rows > > back. However, I get: > > > > name | sum > > -------------------- > > | > > (1 row) > > > > Is this a bug, or is it supposed to work this way? I've tried this on > > both versions 6.5.2 and 6.5.3 with the same result. > > > > Any insight would be appreciated. Thank-you. > > > > Cheers, > > Richard