JOIN liefert verschiedene Ergebnisse für MySQL 4 und 5
am 28.11.2006 09:18:16 von Andreas PankratzHallo,
da es mit dem Join Thema 2 Fragen früher eigentlich nichts zu tun hat,
mach ich einen neuen Eintrag.
Datenbanken:
MySQL 4.1.11 sowie MySQL 5.0.26
Die Struktur / Daten:
CREATE TABLE `portal_user` (
`user_id` int(10) unsigned NOT NULL auto_increment,
..........output omitted..............
(1, 'name', ......)
------------------------------------------------------------ ---------------=
----------------------
CREATE TABLE `portal_user_email` (
`email_id` tinyint(3) unsigned NOT NULL default '0',
`user_id` int(10) unsigned NOT NULL default '0',
...........output omitted...............
(1, 1)
(2, 1)
(3, 1)
(4, 1)
------------------------------------------------------------ ---------------=
------------------------
CREATE TABLE `portal_email` (
`email_id` tinyint(3) unsigned NOT NULL auto_increment,
`email_value` varchar(30) default NULL,
............output omitted....................
(1, 'send')
(2, 'take')
(3, 'answer')
(4, 'close')
(5, 'changeadmin')
------------------------------------------------------------ ---------------=
-------------------------
Die Query:
SELECT portal_user.user_id, portal_user_email.user_id AS is_set,
portal_email.email_id, portal_email.email_value
FROM portal_user
INNER JOIN portal_user_email
ON portal_user_email.user_id =3D portal_user.user_id
RIGHT JOIN portal_email
ON portal_email.email_id =3D portal_user_email.email_id
WHERE portal_user.user_name =3D 'name'
------------------------------------------------------------ ---------------=
-------------------------
Das Ergebnis in 4.1:
user_id... is_set...email_id....email_value
1...........1...........1..............send
1...........1...........2..............take
1...........1...........3..............answer
1...........1...........4..............close
1...........NULL.....5..............changeadmin
Das Ergebnis in 5.0:
user_id... is_set...email_id....email_value
1...........1...........1..............send
1...........1...........2..............take
1...........1...........3..............answer
1...........1...........4..............close
Ich habe gestern schon verzweifelt versucht das Query umzuschreiben
aber rein logisch bekam ich mehr oder weniger immer das Gleiche. Die
Programmlogik benutzt den NULL Wert um "changeadmin" als nicht
aktiviert anzugeben.
Die Suche hat nur ergeben, dass in MySQL 5.0.12 Sachen bei den
Comma-separated bzw. NATURAL Joins geändert wurden.
Wie kann ich das Query umschreiben, so dass ich wieder das Resultset
aus 4.1 erhalte?
Bin für jede Art Anregung dankbar.
Gruß
Andreas Pankratz