I have 2 almost identical SQL statements {copied except 1 is a LEFT join and
the other is an INNER join}.
The INNER join gives me values for all of the fields. The LEFT join gives me
NULL's for all of the prec_... {the LEFT join table} fields.
If the INNER JOIN gives me values and not an empty set then why does the LEFT
join give me NULL's?
I have included the satements, SELECT * and CREATE TABLE for the 3 tables.
I have run this on 5.0.15 and 5.0.17.
mysql> SELECT user.user_ID, sesn.user_ID, sesn.orgn_ID, prec3.orgn_ID,
-> prec3.prec_Type, prec3.prec_Level,prec3.prec_Value,
prec3.prec_ID,
-> if(isnull(prec3.prec_Replace_Level),
-> 'sesn',
-> prec3.prec_Replace_Level
-> ) as pl3
-> FROM users AS user
-> INNER JOIN sessions AS sesn
-> USING(user_ID
-> )
-> LEFT JOIN precedences AS prec3
-> ON (prec3.orgn_ID = sesn.orgn_ID
-> AND prec3.prec_Type = 'Phones'
-> AND prec3.prec_Level = 'user'
-> AND prec3.prec_Value = 'Primary'
-> AND prec3.prec_ID = 3
-> )
-> where sesn.sesn_ID = 1;
+---------+---------+---------+---------+-----------+------------+------------+---------+------+
| user_ID | user_ID | orgn_ID | orgn_ID | prec_Type | prec_Level | prec_Value |
prec_ID | pl3 |
+---------+---------+---------+---------+-----------+------------+------------+---------+------+
| AGB1 | AGB1 | AXIS | NULL | NULL | NULL | NULL
| NULL | sesn |
+---------+---------+---------+---------+-----------+------------+------------+---------+------+
1 row in set (0.02 sec)
mysql>
mysql>
mysql> SELECT user.user_ID, sesn.user_ID, sesn.orgn_ID, prec3.orgn_ID,
-> prec3.prec_Type, prec3.prec_Level,prec3.prec_Value,
prec3.prec_ID,
-> if(isnull(prec3.prec_Replace_Level),
-> 'sesn',
-> prec3.prec_Replace_Level
-> ) as pl3
-> FROM users AS user
-> INNER JOIN sessions AS sesn
-> USING(user_ID
-> )
-> INNER JOIN precedences AS prec3
-> ON (prec3.orgn_ID = sesn.orgn_ID
-> AND prec3.prec_Type = 'Phones'
-> AND prec3.prec_Level = 'user'
-> AND prec3.prec_Value = 'Primary'
-> AND prec3.prec_ID = 3
-> )
-> where sesn.sesn_ID = 1;
+---------+---------+---------+---------+-----------+------------+------------+---------+------+
| user_ID | user_ID | orgn_ID | orgn_ID | prec_Type | prec_Level | prec_Value |
prec_ID | pl3 |
+---------+---------+---------+---------+-----------+------------+------------+---------+------+
| AGB1 | AGB1 | AXIS | AXIS | phones | user | Primary
| 3 | locn |
+---------+---------+---------+---------+-----------+------------+------------+---------+------+
1 row in set (0.00 sec)
mysql>
mysql> SELECT * FROM sessions;
+---------+--------------+--------------+---------+---------+---------+---------+---------+---------------------+---------------------+
| sesn_ID | perm_user_ID | perm_usgp_ID | user_ID | usgp_ID | acct_ID | locn_ID
| orgn_ID | sesn__Timestamp | sesn_Create |
+---------+--------------+--------------+---------+---------+---------+---------+---------+---------------------+---------------------+
| 1 | AGB1 | ADZZ | AGB1 | ADZZ | | AXIS
| AXIS | 2005-12-23 08:32:26 | 2005-12-23 08:30:02 |
| 2 | AGB1 | ADZZ | AGB1 | ADZZ | | AXIS
| AXIS | 2005-12-23 08:32:26 | 2005-12-23 08:30:07 |
+---------+--------------+--------------+---------+---------+---------+---------+---------+---------------------+---------------------+
2 rows in set (0.02 sec)
mysql>
mysql> SELECT * FROM users;
+---------+---------+---------+---------+--------------+------------------+-----------+------------+------------+------------+-------------+----------+---------------------+-------------+
| user_ID | orgn_ID | locn_ID | usgp_ID | prev_usgp_ID | user_Log_On_Name |
user_Pass | user_FName | user_LName | user_PName | user_Active | user_Who |
user_Timestamp | user_Create |
+---------+---------+---------+---------+--------------+------------------+-----------+------------+------------+------------+-------------+----------+---------------------+-------------+
| AGB1 | AXIS | AXIS | ADZZ | NULL | gbruce |
rgbjs1jc | Ralph | Bruce | Gordon | Yes | AGB1 |
2005-12-23 08:59:31 | NULL |
+---------+---------+---------+---------+--------------+------------------+-----------+------------+------------+------------+-------------+----------+---------------------+-------------+
1 row in set (0.00 sec)
mysql>
mysql> SELECT * FROM precedences;
+---------+-----------+------------+------------+---------+--------------------+--------------------+-------------+----------+---------------------+---------------------+
| orgn_ID | prec_Type | prec_Level | prec_Value | prec_ID | prec_Replace_Level
| prec_Replace_Value | prec_Active | prec_Who | prec_Timestamp |
prec_Create |
+---------+-----------+------------+------------+---------+--------------------+--------------------+-------------+----------+---------------------+---------------------+
| AXIS | phones | user | Primary | 1 | user
| Primary | Yes | AGB1 | 2005-12-23 09:01:11 |
2005-12-23 09:01:05 |
| AXIS | phones | user | Primary | 2 | acct
| Primary | Yes | AGB1 | 2005-12-23 09:01:24 |
2005-12-23 09:01:05 |
| AXIS | phones | user | Primary | 3 | locn
| Primary | Yes | AGB1 | 2005-12-23 09:02:04 |
2005-12-23 09:01:41 |
| AXIS | phones | user | Primary | 4 | orgn
| Primary | Yes | AGB1 | 2005-12-23 09:02:01 |
2005-12-23 09:01:56 |
+---------+-----------+------------+------------+---------+--------------------+--------------------+-------------+----------+---------------------+---------------------+
4 rows in set (0.00 sec)
mysql> SHOW CREATE TABLE sessions;
| Table | Create Table
| sessions | CREATE TABLE `sessions` (
`sesn_ID` int(11) NOT NULL auto_increment,
`perm_user_ID` char(4) NOT NULL default '',
`perm_usgp_ID` char(4) NOT NULL default '',
`user_ID` char(4) NOT NULL default '',
`usgp_ID` char(4) NOT NULL default '',
`acct_ID` char(4) NOT NULL default '',
`locn_ID` char(4) NOT NULL default '',
`orgn_ID` char(4) NOT NULL default '',
`sesn__Timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
`sesn_Create` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`sesn_ID`),
KEY `perm_user_ID_IDX` (`perm_user_ID`,`sesn_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
1 row in set (0.00 sec)
mysql> SHOW CREATE TABLE users;
| Table | Create Table
| users | CREATE TABLE `users` (
`user_ID` char(4) NOT NULL default '',
`orgn_ID` char(4) NOT NULL default '',
`locn_ID` char(4) NOT NULL default '',
`usgp_ID` char(4) NOT NULL default '',
`prev_usgp_ID` char(4) default NULL,
`user_Log_On_Name` char(50) NOT NULL default '',
`user_Pass` char(50) NOT NULL default '',
`user_FName` char(50) NOT NULL default '',
`user_LName` char(50) NOT NULL default '',
`user_PName` char(50) NOT NULL default '',
`user_Active` enum('Yes','No') NOT NULL default 'Yes',
`user_Who` char(4) NOT NULL default '',
`user_Timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
`user_Create` datetime default NULL,
PRIMARY KEY (`user_ID`),
UNIQUE KEY `user_Log_On_Name_IDX` (`user_Log_On_Name`),
KEY `usgp_ID_IDX` (`usgp_ID`),
KEY `user_locn_ID_IDX` (`locn_ID`),
KEY `orgn_idx` (`orgn_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
1 row in set (0.02 sec)
mysql> SHOW CREATE TABLE precedences;
| Table | Create Table
| precedences | CREATE TABLE `precedences` (
`orgn_ID` char(8) NOT NULL default '',
`prec_Type` enum('phones','addresses','emails','web') NOT NULL default
'addresses',
`prec_Level` enum('user','acct','locn','orgn') NOT NULL default 'orgn',
`prec_Value` char(20) NOT NULL default 'Primary',
`prec_ID` smallint(6) NOT NULL default '0',
`prec_Replace_Level` enum('user','acct','locn','orgn') NOT NULL default
'orgn',
`prec_Replace_Value` char(20) NOT NULL default 'Primary',
`prec_Active` enum('Yes','No') NOT NULL default 'Yes',
`prec_Who` char(8) NOT NULL default '',
`prec_Timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
`prec_Create` datetime NOT NULL,
PRIMARY KEY (`orgn_ID`,`prec_Type`,`prec_Level`,`prec_Value`,`prec_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
1 row in set (0.00 sec)
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]