Toon posts:

[MYSQL] left outer join query probleem

Pagina: 1
Acties:
  • 680 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik zit met een probleem met mijn left outer join die de juiste records niet toont.

Ik heb 3 tabellen

1-de mogelijke talen,
2-de code die gebruikt worden
3-de vertaligen die bij de code horen

Dit zijn de tabellen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
LANGS

nl  nederlands
fr  frans


VERTAALCODE

1   woord1
2   woord2


VERTALING

1   1   nl  woord 1
2   1   fr  mot 1
3   2   nl  woord 2


('mot 2' ontbreekt dus)

Ik wil het volgende terug krijgen voor woord2:

code:
1
2
nl  nederlands  woord 2
fr  frans       [null]


Dit is m'n query:
SQL:
1
SELECT * FROM LANGS LEFT OUTER JOIN VERTALING ON (LANGS_CODE = VERTALING_CODE) WHERE (VERTALING_VERTAALCODE = 2 or VERTALING_VERTAALCODE is null)


maar ik krijg dit:
code:
1
nl  nederlands  woord 2


Ik maak toch goed gebruik van de left outer join, waarom wordt de 2e record niet getoond?
Ik maak gebruik van een mysql database

Iemand een idee wat ik verkeerd doe, of ben ik echt fout bezig (is al een eindje geleden dat ik queries heb geschreven)

  • J2pc
  • Registratie: Oktober 2002
  • Niet online

J2pc

UT Tux Edition

Je legt in je where-clause een restrictie op aan de records die in de tabel vertaling zitten, en niet het resultaat van je join.

SQL:
1
2
3
4
SELECT * 
FROM ( SELECT *
FROM LANGS LEFT OUTER JOIN VERTALING ON (LANGS_CODE = VERTALING_CODE) ) as TABLE
WHERE (TABLE_VERTALING_VERTAALCODE = 2 or TABLE_VERTALING_VERTAALCODE is null)


de kolom namen kloppen waarschijnlijk niet helemaal, maar zoiets moet 't worden ;)

"The computer is incredibly fast, accurate, and stupid. Man is unbelievably slow, inaccurate, and brilliant. The marriage of the two is a challenge and opportunity beyond imagination." © Stuart G. Walesh


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
nou, dat lijkt me een beetje overdreven query.... kun je niet een mysqldump van die drie tabellen maken, want het zit hem denk ik wel in wat J2pc in het begin zegt....

Verwijderd

Topicstarter
de oplossing van j2pc werkt ook niet:

ik had mijn tabellen wat anders genoemd, dit zijn ze echt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE TABLE `PM_LANGUAGE` (
  `PM_LANGUAGE_CODE` char(3) NOT NULL default '',
  `PM_LANGUAGE_NAME` varchar(30) NOT NULL default '',
  PRIMARY KEY  (`PM_LANGUAGE_CODE`),
  UNIQUE KEY `PM_LANGUAGE_NAME` (`PM_LANGUAGE_NAME`),
  UNIQUE KEY `PM_LANGUAGE_CODE` (`PM_LANGUAGE_CODE`)
) ENGINE=MyISAM;

CREATE TABLE `PM_TRANS` (
  `PM_TRANS_ID` int(11) NOT NULL auto_increment,
  `PM_TRANS_NAME` varchar(80) NOT NULL default '',
  PRIMARY KEY  (`PM_TRANS_ID`),
  UNIQUE KEY `PM_TRANS_NAME` (`PM_TRANS_NAME`)
) ENGINE=MyISAM;

CREATE TABLE `PM_TRANS_LANG` (
  `PM_TRANS_LANG_ID` int(11) NOT NULL auto_increment,
  `PM_TRANS_ID_LANG` int(11) NOT NULL default '0',
  `PM_TRANS_LANG_CODE` char(3) NOT NULL default '',
  `PM_TRANS_LANG_TRANS` varchar(200) default NULL,
  PRIMARY KEY  (`PM_TRANS_LANG_ID`),
) ENGINE=MyISAM;


ik heb dit vroeger vele malen gedaan, maar dan met MS SQL server, nu dus met MySQL...

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
je kunt de voorwaarde bijsluiten in de join.... zit nog even te kijken waarom dat ook alweer zo is, maar ik raak in de war door die lange veldnamen :)

SQL:
1
select * from PM_LANGUAGE LEFT OUTER JOIN PM_TRANS_LANG ON (PM_LANGUAGE.PM_LANGUAGE_CODE = PM_TRANS_LANG.PM_TRANS_LANG_CODE AND PM_TRANS_ID_LANG = 2) 

  • J2pc
  • Registratie: Oktober 2002
  • Niet online

J2pc

UT Tux Edition

SQL:
1
2
SELECT pm_language.*, pm_trans_lang_trans
FROM pm_language LEFT OUTER JOIN pm_trans_lang ON (pm_trans_lang_code = pm_language_code AND pm_trans_id_lang = 2)


ervanuitgaande dat de columnamen overeenkomen met de colomvolgorde in je voorbeeld ;)

/edit
must refresh sooner!! :+

[ Voor 6% gewijzigd door J2pc op 07-06-2007 12:27 ]

"The computer is incredibly fast, accurate, and stupid. Man is unbelievably slow, inaccurate, and brilliant. The marriage of the two is a challenge and opportunity beyond imagination." © Stuart G. Walesh


Verwijderd

Topicstarter
Edwardvb, jou oplossing heeft het gedaan, heel erg bedankt, zat er al een tijdje op te zoeken.

Ik kon me echt niet herinneren dat het op deze manier moest gedaan worden. Kan het niet zijn dat MS SQL hier anders mee omgaat?

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Verwijderd schreef op donderdag 07 juni 2007 @ 12:27:
Edwardvb, jou oplossing heeft het gedaan, heel erg bedankt, zat er al een tijdje op te zoeken.

Ik kon me echt niet herinneren dat het op deze manier moest gedaan worden. Kan het niet zijn dat MS SQL hier anders mee omgaat?
nee, die moet in deze situatie hetzelfde resultaat geven.... ik ben eerlijk gezegd gestopt met het denken over het WAAROM het zo moet eigenlijk... kan vandaag niet zo goed denken :)
Pagina: 1