Re: LEFT JOIN not working on 5.0.16 - urgent help
Terence <[EMAIL PROTECTED]> wrote on 11/23/2005 08:22:30 PM: > Hi All, > > We have upgraded from 4.1.0 to 5.0.16 and notice all left joins not > working. It works fine on 4.1 but 5.0.16 gives us an error: > > > How to reproduce: > > CREATE TABLE `user_master` ( >`user_id` int(5) unsigned NOT NULL auto_increment, >`department_id` int(5) default NULL, >`role_id` int(5) unsigned default NULL, >`username` varchar(50) NOT NULL, >PRIMARY KEY (`user_id`), >UNIQUE KEY `user_id` (`user_id`), >KEY `user_id_2` (`user_id`) > ); > > CREATE TABLE `role_master` ( >`role_id` int(5) unsigned NOT NULL auto_increment, >`role_name` varchar(50) NOT NULL, >PRIMARY KEY (`role_id`), >UNIQUE KEY `role_id` (`role_id`), >KEY `role_id_2` (`role_id`) > ); > > > CREATE TABLE `department_master` ( >`department_id` int(5) unsigned NOT NULL auto_increment, >`department_name` varchar(50) NOT NULL, >PRIMARY KEY (`department_id`), >UNIQUE KEY `department_id` (`department_id`), >KEY `department_id_2` (`department_id`) > ); > > > INSERT INTO role_master(role_name) VALUES('Administrator'); > INSERT INTO department_master(department_name) VALUES('ITS'); > INSERT INTO user_master(department_id,role_id,username) > VALUES('1','1','Joey'); > > SELECT um.username,rm.role_name,dm.department_name > FROM user_master um, role_master rm > LEFT JOIN department_master dm ON um.department_id = dm.department_id > WHERE um.role_id = rm.role_id; > > > 1054 - Unknown column 'um.department_id' in 'on clause' > Query: > SELECT um.username,rm.role_name,dm.department_name > FROM user_master um, role_master rm > LEFT JOIN department_master dm ON um.department_id = dm.department_id > WHERE um.role_id = rm.role_id > = > > > Has the left join syntax changed? > > -- > Terence Le Grange > Senior IS Executive - ITS > Sunway University College > Email: [EMAIL PROTECTED] > Phone: (+603) 7491 8623 ext. 8078 > Website: http://www.sunway.edu.my > The SQL didn't change, the query engine was debugged. That is the error you should have been getting all along but weren't. Please check the manual for a full explanation but the short version is that crappy comma-delimited method of making a CROSS JOIN has been demoted in evaluation priority (where it should be). Three options: a) swap the order you list the tables so that user_master appears next to the LEFT JOIN b) use parentheses to reprioritize the joins so that user_master CROSS JOINs to role_master BEFORE you LEFT JOIN to department_master c) quit using the comma. Use CROSS JOIN instead. Shawn Green Database Administrator Unimin Corporation - Spruce Pine
Re: LEFT JOIN not working on 5.0.16 - urgent help
Terence, >SELECT um.username,rm.role_name,dm.department_name >FROM user_master um, role_master rm >LEFT JOIN department_master dm ON um.department_id = dm.department_id >WHERE um.role_id = rm.role_id; >J Your query joins rm to dm on a um column = a dm column. Recent 5.0 releases rightly object to syntactical weirdness like that. You need something like... ... FROM role_master rm INNER JOIN user_master um USING (role_id) LEFT JOIN department_master USING (department_id) ... PB - Terence wrote: Hi All, We have upgraded from 4.1.0 to 5.0.16 and notice all left joins not working. It works fine on 4.1 but 5.0.16 gives us an error: How to reproduce: CREATE TABLE `user_master` ( `user_id` int(5) unsigned NOT NULL auto_increment, `department_id` int(5) default NULL, `role_id` int(5) unsigned default NULL, `username` varchar(50) NOT NULL, PRIMARY KEY (`user_id`), UNIQUE KEY `user_id` (`user_id`), KEY `user_id_2` (`user_id`) ); CREATE TABLE `role_master` ( `role_id` int(5) unsigned NOT NULL auto_increment, `role_name` varchar(50) NOT NULL, PRIMARY KEY (`role_id`), UNIQUE KEY `role_id` (`role_id`), KEY `role_id_2` (`role_id`) ); CREATE TABLE `department_master` ( `department_id` int(5) unsigned NOT NULL auto_increment, `department_name` varchar(50) NOT NULL, PRIMARY KEY (`department_id`), UNIQUE KEY `department_id` (`department_id`), KEY `department_id_2` (`department_id`) ); INSERT INTO role_master(role_name) VALUES('Administrator'); INSERT INTO department_master(department_name) VALUES('ITS'); INSERT INTO user_master(department_id,role_id,username) VALUES('1','1','Joey'); SELECT um.username,rm.role_name,dm.department_name FROM user_master um, role_master rm LEFT JOIN department_master dm ON um.department_id = dm.department_id WHERE um.role_id = rm.role_id; 1054 - Unknown column 'um.department_id' in 'on clause' Query: SELECT um.username,rm.role_name,dm.department_name FROM user_master um, role_master rm LEFT JOIN department_master dm ON um.department_id = dm.department_id WHERE um.role_id = rm.role_id = Has the left join syntax changed? -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.362 / Virus Database: 267.13.6/179 - Release Date: 11/23/2005 -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]
Re: LEFT JOIN not working on 5.0.16 - urgent help
On 24/11/2005 2:22 p.m., Terence wrote: SELECT um.username,rm.role_name,dm.department_name FROM user_master um, role_master rm LEFT JOIN department_master dm ON um.department_id = dm.department_id WHERE um.role_id = rm.role_id; 1054 - Unknown column 'um.department_id' in 'on clause' Query: SELECT um.username,rm.role_name,dm.department_name FROM user_master um, role_master rm LEFT JOIN department_master dm ON um.department_id = dm.department_id WHERE um.role_id = rm.role_id = Has the left join syntax changed? Yeah this caught me out too. The precedence of JOINs has changed to more strictly follow the SQL standard. In 5.0, MySQL is now interpreting your query as: SELECT ... FROM user_master um, (role_master rm LEFT JOIN department_master dm ON um.department_id = dm.department_id) ... And the table um doesn't exist in the join between rm and dm. The solution is to put the FROM tables in parentheses, like: SELECT ... FROM (user_master um, role_master rm) LEFT JOIN department_master dm ON um.department_id = dm.department_id) ... You can read more about this here: http://dev.mysql.com/doc/refman/5.0/en/join.html -Simon -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]
LEFT JOIN not working on 5.0.16 - urgent help
Hi All, We have upgraded from 4.1.0 to 5.0.16 and notice all left joins not working. It works fine on 4.1 but 5.0.16 gives us an error: How to reproduce: CREATE TABLE `user_master` ( `user_id` int(5) unsigned NOT NULL auto_increment, `department_id` int(5) default NULL, `role_id` int(5) unsigned default NULL, `username` varchar(50) NOT NULL, PRIMARY KEY (`user_id`), UNIQUE KEY `user_id` (`user_id`), KEY `user_id_2` (`user_id`) ); CREATE TABLE `role_master` ( `role_id` int(5) unsigned NOT NULL auto_increment, `role_name` varchar(50) NOT NULL, PRIMARY KEY (`role_id`), UNIQUE KEY `role_id` (`role_id`), KEY `role_id_2` (`role_id`) ); CREATE TABLE `department_master` ( `department_id` int(5) unsigned NOT NULL auto_increment, `department_name` varchar(50) NOT NULL, PRIMARY KEY (`department_id`), UNIQUE KEY `department_id` (`department_id`), KEY `department_id_2` (`department_id`) ); INSERT INTO role_master(role_name) VALUES('Administrator'); INSERT INTO department_master(department_name) VALUES('ITS'); INSERT INTO user_master(department_id,role_id,username) VALUES('1','1','Joey'); SELECT um.username,rm.role_name,dm.department_name FROM user_master um, role_master rm LEFT JOIN department_master dm ON um.department_id = dm.department_id WHERE um.role_id = rm.role_id; 1054 - Unknown column 'um.department_id' in 'on clause' Query: SELECT um.username,rm.role_name,dm.department_name FROM user_master um, role_master rm LEFT JOIN department_master dm ON um.department_id = dm.department_id WHERE um.role_id = rm.role_id = Has the left join syntax changed? -- Terence Le Grange Senior IS Executive - ITS Sunway University College Email: [EMAIL PROTECTED] Phone: (+603) 7491 8623 ext. 8078 Website: http://www.sunway.edu.my -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]