All pastes #546005 Raw Edit

Someone

public text v1 · immutable
·published 2007-06-06 23:03 UTC
rendered paste body
Query: No Group Clause:

select  b.date_stamp, b.user_id, z.id as user_wage_id, z.effective_date as user_wage_effective_date
from    user_date_total as a
LEFT JOIN user_date as b ON a.user_date_id = b.id
LEFT JOIN user_wage as z ON z.id = (select z.id
	from user_wage as z
	where z.user_id = b.user_id
	and z.effective_date <= b.date_stamp
	and z.deleted = 0
	order by z.effective_date desc limit 1)
where
b.user_id = '40'
AND b.pay_period_id = '1103'
AND b.date_stamp <= '2006-01-02'
AND a.status_id in (10,30)
AND ( a.deleted = 0 AND b.deleted = 0)

+----+--------------------+-------+--------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------+---------+----------------------+------+-----------------------------+
| id | select_type        | table | type   | possible_keys                                                                                                           | key                                 | key_len | ref                  | rows | Extra                       |
+----+--------------------+-------+--------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------+---------+----------------------+------+-----------------------------+
|  1 | PRIMARY            | b     | ref    | PRIMARY,user_date_id,user_date_user_id_user_date_deleted,user_date_date_stamp,user_date_pay_period_id,user_date_user_id | user_date_user_id_user_date_deleted | 4       | const                |    2 | Using where                 |
|  1 | PRIMARY            | z     | eq_ref | PRIMARY,user_wage_id                                                                                                    | PRIMARY                             | 4       | func                 |    1 |                             |
|  1 | PRIMARY            | a     | ref    | user_date_total_user_date_id                                                                                            | user_date_total_user_date_id        | 4       | timetrex31.b.id      |    3 | Using where                 |
|  2 | DEPENDENT SUBQUERY | z     | ref    | user_wage_user_id_effective_date                                                                                        | user_wage_user_id_effective_date    | 4       | timetrex31.b.user_id |    2 | Using where; Using filesort |
+----+--------------------+-------+--------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------+---------+----------------------+------+-----------------------------+
4 rows in set (0.00 sec)

+------------+---------+--------------+--------------------------+
| date_stamp | user_id | user_wage_id | user_wage_effective_date |
+------------+---------+--------------+--------------------------+
| 2006-01-01 |      40 |          156 | 2006-01-01               |
| 2006-01-01 |      40 |          156 | 2006-01-01               |
| 2006-01-01 |      40 |          156 | 2006-01-01               |
| 2006-01-01 |      40 |          156 | 2006-01-01               |
| 2006-01-01 |      40 |          156 | 2006-01-01               |
| 2006-01-01 |      40 |          156 | 2006-01-01               |
| 2006-01-02 |      40 |          156 | 2006-01-01               |
| 2006-01-02 |      40 |          156 | 2006-01-01               |
| 2006-01-02 |      40 |          156 | 2006-01-01               |
+------------+---------+--------------+--------------------------+
9 rows in set (0.00 sec)


Same Query: Simple Group Clause:

select  b.date_stamp, b.user_id, z.id as user_wage_id, z.effective_date as user_wage_effective_date
from    user_date_total as a
LEFT JOIN user_date as b ON a.user_date_id = b.id
LEFT JOIN user_wage as z ON z.id = (select z.id
	from user_wage as z
	where z.user_id = b.user_id
	and z.effective_date <= b.date_stamp
	and z.deleted = 0
	order by z.effective_date desc limit 1)
where
b.user_id = '40'
AND b.pay_period_id = '1103'
AND b.date_stamp <= '2006-01-02'
AND a.status_id in (10,30)
AND ( a.deleted = 0 AND b.deleted = 0)
group by b.date_stamp


+----+--------------------+-------+--------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------+---------+-----------------+------+-----------------------------+
| id | select_type        | table | type   | possible_keys                                                                                                           | key                                 | key_len | ref             | rows | Extra                       |
+----+--------------------+-------+--------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------+---------+-----------------+------+-----------------------------+
|  1 | PRIMARY            | b     | ref    | PRIMARY,user_date_id,user_date_user_id_user_date_deleted,user_date_date_stamp,user_date_pay_period_id,user_date_user_id | user_date_user_id_user_date_deleted | 4       | const           |    2 | Using where                 |
|  1 | PRIMARY            | z     | eq_ref | PRIMARY,user_wage_id                                                                                                    | PRIMARY                             | 4       | func            |    1 |                             |
|  1 | PRIMARY            | a     | ref    | user_date_total_user_date_id                                                                                            | user_date_total_user_date_id        | 4       | timetrex31.b.id |    3 | Using where                 |
|  2 | DEPENDENT SUBQUERY | z     | ref    | user_wage_user_id_effective_date                                                                                        | user_wage_user_id_effective_date    | 4       | func            |    2 | Using where; Using filesort |
+----+--------------------+-------+--------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------+---------+-----------------+------+-----------------------------+
4 rows in set (0.00 sec)

+------------+---------+--------------+--------------------------+
| date_stamp | user_id | user_wage_id | user_wage_effective_date |
+------------+---------+--------------+--------------------------+
| 2006-01-01 |      40 |         NULL | NULL                     |
| 2006-01-02 |      40 |          156 | 2006-01-01               |
+------------+---------+--------------+--------------------------+
2 rows in set (0.01 sec)

wtf?