probleme beim auslesen aus mehreren tabellen
Daniel
- datenbank
0 André Laugks0 Daniel0 André Laugks0 Daniel0 norbert =:-)0 Daniel
Hallo einmal,
Ich möchte gerne aus mehreren Tabellen Daten auslesen und auf Vorhandenheit überprüfen, laut mysql Homepage sollte das so gehen:
SELECT
best_beantragt.referenz_nr, best_offen.referenz_nr, best_ausgeliefert.referenz_nr
FROM
best_beantragt,best_offen,best_ausgeliefert
WHERE
best_beantragt.referenz_nr = "abcdef"
OR
best_offen.referenz_nr = "abcdef"
OR
best_ausgeliefert.referenz_nr = "abcdef";
...aber irgendwie geht das so nicht, ich bekomme zwar keinen SQL-Error, aber ich bekomme auch nicht das gewünschte Ergebnis, weil es existieren ein paar Datensätze mit "abcdef".
Vielleicht kann mir von euch Self-mysql'ler einen Rat geben? :)
Danke
mfg,
Daniel
Hallo!
SELECT
best_beantragt.referenz_nr, best_offen.referenz_nr, best_ausgeliefert.referenz_nr
FROM
best_beantragt,best_offen,best_ausgeliefert
WHERE
best_beantragt.referenz_nr = "abcdef"
OR
best_offen.referenz_nr = "abcdef"
OR
best_ausgeliefert.referenz_nr = "abcdef";
Kein Fehler bedeutet, die Bedingung schlägt nicht an.
Lase mal die WHERE-Klausel weg und schaue Dir mal das Ergebnis an. Steht da bei best_beantragt.referenz_nr und den anderen wirklich "abcdef"?
Vielleicht kann mir von euch Self-mysql'ler einen Rat geben? :)
Neee, so jetzt nicht.
Ansonsten, akknst Du die DB als MySQL-Dump zum Download bereit stellen?
MfG, André Laugks
Hallo Andre
Kein Fehler bedeutet, die Bedingung schlägt nicht an.
Lase mal die WHERE-Klausel weg und schaue Dir mal das Ergebnis an. Steht da bei best_beantragt.referenz_nr und den anderen wirklich "abcdef"?
Ich hab einmal die WHERE Klausel weggelassen (ich teste das immer mit phpmyadmin) und dort sagt er mir trotzdem, dass der Befehl erfolgreich ausgeführt wurde, aber es wird kein Datensatz zurückgegeben.
Vielleicht kann mir von euch Self-mysql'ler einen Rat geben? :)
Neee, so jetzt nicht.
Wieso denn nicht? ;)
Ansonsten, akknst Du die DB als MySQL-Dump zum Download bereit stellen?
Aber selbstverfreilich
http://www.munds.at/mysql_dump.txt
Bitte den darin enthaltenen Daten keine allzugrosse Beachtung schenken, ist noch in der Testphase :)
Danke,
Daniel
Hallo!
http://www.munds.at/mysql_dump.txt
Bitte den darin enthaltenen Daten keine allzugrosse Beachtung schenken, ist noch in der Testphase :)
Mit so einem Dump kann man sich einen besseren Überblick verschaffen.
Wieso funktioniert Deine SQL-Abfrage nicht? In den Tabellen "best_offen" und "best_ausgeliefert" steht in den Spalten referenz_nr keine Werte. In der Spalte "referenz_nr" der Tabelle "best_beantragt" gibt es ein paar Datenwerte. Was soll Dir MySQL nun anzeigen? MySQL kann halt Datenwerte mit NICHTS nicht verbinden. Den JOIN den Du angewendet hast, nennt man EQUI JOIN.
Für so etwas gibt es den LEFT JOIN oder RIGHT JOIN. MySQL zeigt hier auch Zeilen aus der linken Tabelle an, für die es in der rechten Tabelle keine Übereinstimmung gibt. Für Datenwerte, für die es in der rechten Tabelle keine Übereinstimmung gibt, wird NULL angezeigt. Bei einem RIGHT JOIN ist das genau umgekehrt. In einem MySQL-Buch wird Dir das sicherlich mit Beispielen besser erklärt, als ich das hier kann.
// LEFT JOIN
Links --> Rechts
best_beantragt --> best_offen --> best_ausgeliefert
FROM best_beantragt AS a LEFT JOIN best_offen AS b ON (a.interne_id>0 OR b.interne_id>0) LEFT JOIN best_ausgeliefert AS c ON (c.interne_id>0)
Man schaut auf die Tabellen dem SQL-Statment nach entlang von links nach rechts.
SELECT
a.referenz_nr AS ref_nr_1,
b.referenz_nr As ref_nr_2,
c.referenz_nr As ref_nr_3
FROM
best_beantragt AS a LEFT JOIN best_offen AS b ON (a.interne_id>0 OR b.interne_id>0)
LEFT JOIN best_ausgeliefert AS c ON (c.interne_id>0)
WHERE
a.referenz_nr = "abcdef
OR
b.referenz_nr = "abcdef"
OR
c.referenz_nr = "abcdef";
In den Klammern "(a.interne_id>0 OR b.interne_id>0)" werden sonst Beziehungen zwischen den Tabellen definiert. Da ich keine gesehen habe, habe ich es mal mit "interne_id>0" gemacht.
Wenn Du als OS Windows einsetzt, kann ich Dir MySQL-Front an Dein Herz legen. Für den lokalen Gebauch weit aus mehr geeignet als phpMyAdmin.
http://mysqlfront.venturemedia.de/index.php?act=ST&f=2&t=328
MfG, André Laugks
Hallo Andre
SELECT
a.referenz_nr AS ref_nr_1,
b.referenz_nr As ref_nr_2,
c.referenz_nr As ref_nr_3
FROM
best_beantragt AS a LEFT JOIN best_offen AS b ON (a.interne_id>0 OR b.interne_id>0)
LEFT JOIN best_ausgeliefert AS c ON (c.interne_id>0)
WHERE
a.referenz_nr = "abcdef
OR
b.referenz_nr = "abcdef"
OR
c.referenz_nr = "abcdef";In den Klammern "(a.interne_id>0 OR b.interne_id>0)" werden sonst Beziehungen zwischen den Tabellen definiert. Da ich keine gesehen habe, habe ich es mal mit "interne_id>0" gemacht.
Ich habe zwischen den Tabellen keine eindeutigen Beziehungen definiert, weil sie eigentlich in keinem Zusammenhang zueinander stehen und als eigenständige Tabellen anzusehen sind. Ich möchte einfach nur in einer SQL Abfrage alle referenz_nr aus den Datenbanken auslesen und somit einen Vergleich starten, ob diese Nummer schon vergeben ist, oder nicht (diese Nr kann nämlich vom Benutzer selbst definiert werden, deswegen die Überprüfung).
Geht das nur über eben diese Joins in Verbindung mit einem eindeutigen Key?
Wenn Du als OS Windows einsetzt, kann ich Dir MySQL-Front an Dein Herz legen. Für den lokalen Gebauch weit aus mehr geeignet als phpMyAdmin.
http://mysqlfront.venturemedia.de/index.php?act=ST&f=2&t=328
Danke für den Tipp!
mfg,
Daniel
Hallo Daniel!
Ich würde es mit Union lösen:
select referenz_nr from best_beantragt where referenz_nr = 'abcdef'
union
select referenz_nr from best_offen where referenz_nr = 'abcdef'
union
select referenz_nr from best_ausgeliefert where referenz_nr = 'abcdef';
Wenns ein Datensatz zurückgeliefert wird, ist die referenz_nr bereits in Verwendung.
mfg
norbert =:-)
Servus Norbert:-)
Ich würde es mit Union lösen:
select referenz_nr from best_beantragt where referenz_nr = 'abcdef'
union
select referenz_nr from best_offen where referenz_nr = 'abcdef'
union
select referenz_nr from best_ausgeliefert where referenz_nr = 'abcdef';Wenns ein Datensatz zurückgeliefert wird, ist die referenz_nr bereits in Verwendung.
mysql liefert mir einen Fehler mit der Abfrage zurück:
MySQL meldet:
You have an error in your SQL syntax near 'UNION SELECT referenz_nr FROM best_offen WHERE referenz_nr = 'abcdef' UNION S' at line 1
rein optisch scheint der String ja in Ordnung zu sein
mfg,
Daniel
Hallo Daniel!
1.) "UNION is implemented in MySQL 4.0.0."
Ich kenne deine Version nicht - aber daran kanns auch liegen ;-)
Wenn Du kleiner 4 verwendest, erreichst Du einfach mit drei einzelnen Abfragen das selbe Ergebnis.
2.) Wenn nicht, kanns nur eine Kleinigkeit an der Syntax sein - hier findest Du mehr:
http://www.mysql.com/doc/en/UNION.html
mfg
norbert =:-)
Hi Norbert
1.) "UNION is implemented in MySQL 4.0.0."
Ich kenne deine Version nicht - aber daran kanns auch liegen ;-)
Wenn Du kleiner 4 verwendest, erreichst Du einfach mit drei einzelnen Abfragen das selbe Ergebnis.
Genau das wollte ich auch gerade im internet gefunden :), meine Version ist nämlich 3.23.x
Naja, man kann ja nicht alles haben :)
mfg,
Daniel
lol
Genau das wollte ich auch gerade im internet gefunden :), meine Version ist nämlich 3.23.x
korrigiere, wollte --> habe :) , das kommt davon wenn man mit den Gedanken wieder einmal ganz woanders ist