5 messages in com.mysql.lists.mysql-deRE: JOIN-Problem| From | Sent On | Attachments |
|---|---|---|
| Felix Ostmann | 14 Jul 2003 06:31 | |
| Dennis Sterzenbach | 14 Jul 2003 06:55 | |
| Beck, Mike | 14 Jul 2003 07:09 | |
| Felix Ostmann | 14 Jul 2003 07:18 | |
| Georg Richter | 14 Jul 2003 10:37 |
| Subject: | RE: JOIN-Problem![]() |
|---|---|
| From: | Felix Ostmann (ostm...@os3.com) |
| Date: | 07/14/2003 07:18:52 AM |
| List: | com.mysql.lists.mysql-de |
-----Original Message----- From: Felix Ostmann [mailto:ostm...@os3.com] Sent: Monday, July 14, 2003 3:32 PM To: MySQL-Mailingliste dt. Subject: JOIN-Problem
<snip>
Sprich wir haben zwei Tabellen die über USING(artikelnr) verbunden sind und es gibt keinen passenden Eintrag in der zweiten Tabelle, dann wird im Ergebnis artikelnr als NULL zurückgegeben. Es gibt zwar verschiedene Varianten das zu unterbinden indem man explizit die Feldnamen angibt der zweiten Tabelle oder mit einem array arbeitet, aber wir suchen halt irgendwie nach der Möglichkeit weiter mit hashref arbeiten zu können ohne explizit alle Tabellenfelder angeben zu müssen (wenn es 300 sind z.b. dürfe es nicht wirklich effektiv sein wenn man alle haben will). Also wir suchen sowas wie: fülle mir die erste Tabelle mit den Daten aus der zweiten Tabelle auf sofern Daten aus der zweiten Tabelle vorhanden sind.
Bin mir noch nicht ganz sicher, ob ich Dich recht verstehe meinst Du das:
tabelle1 artnr bezeichnung 1 Hund 2 Katz
tabelle2 artnr bezeichnung 1 Katz
machst Du: SELECT tabelle1.*,tabelle2.* FROM tabelle 1 LEFT JOIN tabelle2 ON tabelle1.artnr = tabelle2.artnr
kriegst Du das:
tabelle1.artnr tabelle1.bezeichnung tabelle2.artnr tabelle2.bezeichnung 1 Hund 1 Katz 2 Katz NULL NULL
und Du willst stattdessen:
artnr bezeichnung 1 Katz 2 Katz
??? Kann noch nicht verstehen unter welchen Umständen das Sinn machen kann, aber die einzige Möglichkeit die mir einfällt um das zu erreichen (ausser dem erstellen einer temporären Tabelle - darüber sollte man natürlich bei sowas nachdenken, wenn man mehr lesende als schreibende Zugriffe hat)
SELECT IFNULL(tabelle1.artnr,tabelle2.artnr) as Artikel, IFNULL(tabelle1.bezeichnung,tabelle2.bezeichnung) as Bez FROM tabelle 1 LEFT JOIN tabelle2 ON tabelle1.artnr = tabelle2.artnr
-- Mit freundlichen Gruessen Dipl.-Ing. (FH) Mike Beck mike...@ibmiller.de Ingenieurbüro Miller
-- Deutsche MySQL Mailingliste Listenarchive: http://lists.mysql.com/mysql-de Abbestellen (unsubscribe): http://lists.mysql.com/mysql-de?unsub=ostm...@os3.com
fast bis zum ende richtig :)
tabelle1.artnr tabelle1.bezeichnung tabelle2.artnr tabelle2.bezeichnung 1 Hund 1 Katz 2 Katz NULL NULL
so bekomme ich das, nur möchte ich, das für nicht gefundene werte kein NULL
rauskommt, sondern das die garnicht auftauchen. Weil so habe ich das Problem,
das ich folgendes rausbekomme:
artnr bezeichnung 1 Katz NULL NULL
ich hätte aber gerne artnr bezeichnung 1 Katz 2 Katz
weil die Werte von 2 und Katz überschrieben werden durch die zweite Tabelle. Was
ich ja genau nicht will :( Ich arbeite mit Perl & hashref, würde das Problem
aber gerne mySQL-Lastig besiegen :)




