469,922 Members | 2,106 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,922 developers. It's quick & easy.

join query result difference between 3.23.49 and 4.0.13

hello,

i have what seems to me a very common operation i'm performing. i need to
find the balance on an invoice. i was not having any problems until the
production server was upgraded to mysql v4.0.13-standard for
pc-linux. there must be a better way to query for this information than
the method i'm using, since the result with v4.0 is not what i expected,
nor what i received with v3.23. i'm including sample data and queries with
my results. i've not been able to find any relevant messages in the list
archives. any comments are greatly appreciated.

========================================

here's the table structure and some sample data:

CREATE TABLE `billing` (
`invoice` mediumint(9) NOT NULL auto_increment,
`user_id` mediumint(9) NOT NULL default '0',
`invoice_date` date NOT NULL default '0000-00-00',
`amount` float NOT NULL default '0',
`timestamp` timestamp(14) NOT NULL,
PRIMARY KEY (`invoice`),
KEY `user_id` (`user_id`),
KEY `user_invoice` (`user_id`,`invoice`)
) TYPE=MyISAM COMMENT='invoices';
INSERT INTO `billing` VALUES (10000, 1, '2003-07-01', '500', 20030716092700);
INSERT INTO `billing` VALUES (10001, 1, '2003-07-03', '600', 20030716092807);

# --------------------------------------------------------

CREATE TABLE `billing_payment` (
`invoice` mediumint(9) NOT NULL default '0',
`amount_paid` mediumint(9) NOT NULL default '0',
`payment_status` varchar(15) NOT NULL default '',
`pending_reason` varchar(15) default NULL,
`payment_date` date default NULL,
`txn_id` varchar(20) default NULL,
`timestamp` timestamp(14) NOT NULL,
KEY `txn_id` (`txn_id`),
KEY `invoice` (`invoice`)
) TYPE=MyISAM COMMENT='payments on invoices';

INSERT INTO `billing_payment` VALUES (10000, 500, 'Completed', NULL,
'2003-07-02', '112233', 20030716092746);

========================================

here are the queries and results. note that query #1 gives the expected
(and desired) result on both versions, but query #2 only gives the expected
(and useful) result in v3.23. to give a brief explanation of the
difference between the queries: invoice 10000 has a payment against it,
while invoice 10001 has no payment records in the payment table.

=== v3.23.49

query #1
mysql> SELECT billing.invoice, SUM(amount_paid) AS paid, (billing.amount -
SUM(amount_paid)) AS balance FROM billing LEFT JOIN billing_payment ON (
billing.invoice=billing_payment.invoice ) WHERE billing.invoice=10000 GROUP
BY billing_payment.invoice;
+---------+------+---------+
| invoice | paid | balance |
+---------+------+---------+
| 10000 | 500 | 0 |
+---------+------+---------+
1 row in set (0.00 sec)

query #2
mysql> SELECT billing.invoice, SUM(amount_paid) AS paid, (billing.amount -
SUM(amount_paid)) AS balance FROM billing LEFT JOIN billing_payment ON (
billing.invoice=billing_payment.invoice ) WHERE billing.invoice=10001 GROUP
BY billing_payment.invoice;
+---------+------+---------+
| invoice | paid | balance |
+---------+------+---------+
| 10001 | 0 | 600 |
+---------+------+---------+
1 row in set (0.00 sec)

=== v4.0.13

query #1
mysql> SELECT billing.invoice, SUM(amount_paid) AS paid, (billing.amount -
SUM(amount_paid)) AS balance FROM billing LEFT JOIN billing_payment ON (
billing.invoice=billing_payment.invoice ) WHERE billing.invoice=10000 GROUP
BY billing_payment.invoice;
+---------+------+---------+
| invoice | paid | balance |
+---------+------+---------+
| 10000 | 500 | 0 |
+---------+------+---------+
1 row in set (0.01 sec)

query #2
mysql> SELECT billing.invoice, SUM(amount_paid) AS paid, (billing.amount -
SUM(amount_paid)) AS balance FROM billing LEFT JOIN billing_payment ON (
billing.invoice=billing_payment.invoice ) WHERE billing.invoice=10001 GROUP
BY billing_payment.invoice;
+---------+------+---------+
| invoice | paid | balance |
+---------+------+---------+
| 10001 | NULL | NULL |
+---------+------+---------+
1 row in set (0.00 sec)

NULL values in this result are not expected, nor are they helpful in
determining the invoice balance.

========================================

thanks again for any suggestions,

doug
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/my***********...ie.nctu.edu.tw

Jul 19 '05 #1
0 2261

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by Omavlana | last post: by
2 posts views Thread by shumaker | last post: by
1 post views Thread by Dot Net Daddy | last post: by
reply views Thread by Waqarahmed | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.