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