Mehrfachabfrage über 2 DB-Tabellen
Mehrfachabfrage über 2 DB-Tabellen
am 21.02.2007 13:33:09 von Armin Barth
Hallo,
Wie realisiere ich eine Mehfachabfrage über 2 Tabllen?
Hintergrund:
geg. 2 Adresstabllen mit abweichenden Spaltennamen aber etwa gleicher
Bedeutung.
z.B. kunden_faktor: adrnr, NAME1, NAME2, STRASSE, PLZ, ORT, .....
und kundenstamm: adrnr, vorname, name, straße, plz, ort,....
Hier soll ermittelt werden, welche Adressnummern doppelt belegt sind,
d.h. wo sich hinter der geleichen Nummer unterschiedliche Namen befinden.
Mein Ansatz:
select adrnr, vorname, name, ort from kundenstamm where adrnr=(select
adrnr from kunden_faktor) and name1 not in ( select NAME1 from
kunden_faktor);
scheitert wegen : ERROR 1242 (21000): Subquery returns more than 1 row
Wie kann man das lösen?
Gruß
Armin
--
Pumpen-Barth, Hohe Straße 1, D-04860 Zinna
Tel.: +49-3421-7283-0; Fax; +49-3421-728337; e-Mail: info@pumpen-barth.de
Re: Mehrfachabfrage über 2 DB-Tabellen
am 21.02.2007 15:17:26 von Claus Reibenstein
Armin Barth schrieb:
> Wie realisiere ich eine Mehfachabfrage über 2 Tabllen?
Mit JOINs.
> Hintergrund:
> geg. 2 Adresstabllen mit abweichenden Spaltennamen aber etwa gleicher
> Bedeutung.
> z.B. kunden_faktor: adrnr, NAME1, NAME2, STRASSE, PLZ, ORT, .....
> und kundenstamm: adrnr, vorname, name, straÃe, plz, ort,....
Und welche Spalten sollen mit welcher verglichen werden? Entspricht
kunden_faktor.NAME1 kundenstamm.vorname oder kundenstamm.name?
> select adrnr, vorname, name, ort from kundenstamm where adrnr=(select
> adrnr from kunden_faktor) and name1 not in ( select NAME1 from
> kunden_faktor);
>
> scheitert wegen : ERROR 1242 (21000): Subquery returns more than 1 row
Damit dürfte der erste Subquery gemeint sein, weil Dir dieser _alle_
adrnr aus kunden_faktor liefert. Also müsste das sicher adrnr IN (...)
heiÃen.
Aber für solch einfache Abfragen brauchst Du überhaupt kein Subquery.
Das geht auch komplett ohne:
SELECT kf.adrnr, kf.NAME1, kf.NAME2, ks.name, ks.vorname
FROM kunden_faktor kf JOIN kundenstamm ks using (adrnr)
WHERE kf.NAME1 != ks.vorname OR kf.NAME2 != ks.name;
GruÃ. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /
Re: Mehrfachabfrage über2 DB-Tabellen
am 21.02.2007 18:10:37 von Armin Barth
Am Wed, 21 Feb 2007 15:17:26 +0100 schrieb Claus Reibenstein:
> Armin Barth schrieb:
>
>> Wie realisiere ich eine Mehfachabfrage über 2 Tabllen?
>
> Mit JOINs.
>
>> Hintergrund:
>> geg. 2 Adresstabllen mit abweichenden Spaltennamen aber etwa gleicher
>> Bedeutung.
>> z.B. kunden_faktor: adrnr, NAME1, NAME2, STRASSE, PLZ, ORT, .....
>> und kundenstamm: adrnr, vorname, name, straÃe, plz, ort,....
>
> Und welche Spalten sollen mit welcher verglichen werden? Entspricht
> kunden_faktor.NAME1 kundenstamm.vorname oder kundenstamm.name?
>
>> select adrnr, vorname, name, ort from kundenstamm where adrnr=(select
>> adrnr from kunden_faktor) and name1 not in ( select NAME1 from
>> kunden_faktor);
>>
>> scheitert wegen : ERROR 1242 (21000): Subquery returns more than 1 row
>
> Damit dürfte der erste Subquery gemeint sein, weil Dir dieser _alle_
> adrnr aus kunden_faktor liefert. Also müsste das sicher adrnr IN (...)
> heiÃen.
>
> Aber für solch einfache Abfragen brauchst Du überhaupt kein Subquery.
> Das geht auch komplett ohne:
>
> SELECT kf.adrnr, kf.NAME1, kf.NAME2, ks.name, ks.vorname
> FROM kunden_faktor kf JOIN kundenstamm ks using (adrnr)
> WHERE kf.NAME1 != ks.vorname OR kf.NAME2 != ks.name;
>
Danke, hat mit sehr geholfen.
Gruss
Armin