Zwei Abfragen zu einer kombinieren

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

RobertG
********
Beiträge: 2070
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zwei Abfragen zu einer kombinieren

Beitrag von RobertG »

Hallo Birgit,

das kommt jetzt natürlich darauf an, welche Felder in den Abfragen enthalten sind.

Code: Alles auswählen

SELECT
"Vorname"
FROM "Tabelle1"
UNION DISTINCT
SELECT"Vorname"
FROM "Tabelle2"
Das schreibt z.B. alle Vornamen aus der einen Tabelle und alle Vornamen aus der zweiten Tabelle untereinander.
Willst Du zwei Tabellen über irgendeine Beziehung miteinander verknüpfen, dann musst Du gegebenenfalls statt eines Gleichheitszeichens einen JOIN erstellen.
Was Du genau brauchen kannst könntest Du gegebenenfalls aus dem ermitteln.

Wenn Du die Abfragen oder ein Beispiel hier postest kann die Hilfestellung auch konkreter sein.

Gruß

Robert
RobertG
********
Beiträge: 2070
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zwei Abfragen zu einer kombinieren

Beitrag von RobertG »

Hallo Birgit,

Du hast zwei Abfragen, die ich gegebenenfalls als Ansichten speichern würde:

Code: Alles auswählen

SELECT "Kommunikation"."Datum_Kom", "Kontakte"."Name", "Kommunikation"."Wiedervorlage", "Kommunikation"."Bemerkung" FROM "Kommunikation", "Kontakte" WHERE "Kommunikation"."Kontakt-ID" = "Kontakte"."Kontakt-ID" AND DATEDIFF( 'dd', "Wiedervorlage", CURDATE( ) ) >= 0 
und

Code: Alles auswählen

SELECT "Kontakte"."Name", "Dokumente_Kunden"."Datum_Dok", "Dokumente"."Dokumentenname" FROM "Kontakte", "Dokumente_Kunden", "Dokumente" WHERE "Dokumente_Kunden"."FK_Kontakt-ID" = "Kontakte"."Kontakt-ID" AND "Dokumente_Kunden"."FK_Dokument-ID" = "Dokumente"."Dokument-ID" AND DATEDIFF( 'dd', "Datum_Dok", CURDATE( ) ) > 100
Das Feld, das in beiden Anfragen vorhanden ist, ist das Feld "Name".
Fasst Du die Anfragen mit

Code: Alles auswählen

SELECT ... FROM "Wiedervorlage_Kom", "Wiedervorlage_Dok" WHERE "Wiedervorlage_Kom"."Name" = "Wiedervorlage_Dok"."Name"
zusammen, so werden nur die Zeilen angezeigt, in denen bei beiden Abfragen das Feld "Name" gleich belegt ist.

Bei

Code: Alles auswählen

SELECT ... FROM "Wiedervorlage_Kom" LEFT JOIN "Wiedervorlage_Dok" ON "Wiedervorlage_Kom"."Name" = "Wiedervorlage_Dok"."Name"
werden alle Datensätze von "Wiedervorlage_Dok" angezeigt, auch wenn kein Name in "Wiedervorlage_Kom" existiert.
Entsprechendes gilt natürlich bei umgekehrter Aufführung der Tabellen.

Das Ganze hat mit Union nichts zu tun, da die Tabellen unterschiedliche Felder haben.

Gruß

Robert
RobertG
********
Beiträge: 2070
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zwei Abfragen zu einer kombinieren

Beitrag von RobertG »

Hallo Birgit,

vielleicht kannst Du ja einmal eine Beispieldatenbank mit ein paar Dummydatensätzen hier anhängen. Mir wird nicht so richtig klar, wo es denn dabei haken sollte.

Gruß

Robert
biggi 0815
Beiträge: 1
Registriert: Mo, 22.06.2015 17:56

Re: Zwei Abfragen zu einer kombinieren

Beitrag von biggi 0815 »

Hallo Robert,

so, ich habe nun eine kleine Datenbank erzeugt. Die beiden Abfragen, die einzeln funktionieren, heißen "Wiedervorlage_Dok" und "Wiedervorlage_Kom".
Wie Du schon bemerkt hast, haben sie als einzige gemeinsame Spalte "Name".
Verbinde ich beide Abfragen mit UNION und lasse mir nur den "Name" anzeigen, so passt alles -"Wiedervorlage_total_Name".
Ich benötige aber noch zusätzlich die anderen Informationen. Ergänze ich die beiden Teilabfragen um die Spalten (die teilweise leer sind), dann erhält man verschiedene Zeilen, die so gar nicht existieren. Irgendwie fehlt noch eine zusätzliche Bedingung...

Viele Grüße
Birgit
Datenbankbsp_150622.odb
(5.08 KiB) 118-mal heruntergeladen
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Zwei Abfragen zu einer kombinieren

Beitrag von F3K Total »

Hi,
so vielleicht? Allerdings hast Du dann unterschiedliche Informationen in einer Spalte.

Code: Alles auswählen

SELECT 
    "Kontakte"."Name",
    "Kommunikation"."Datum_Kom" as "Datum_Kom_Dok", 
    "Kommunikation"."Wiedervorlage", 
    "Kommunikation"."Bemerkung" as "Bem/Dok" 
FROM 
    "Kommunikation", 
    "Kontakte" 
WHERE 
    "Kommunikation"."Kontakt-ID" = "Kontakte"."Kontakt-ID" 
AND 
    "Kommunikation"."erledigt" = FALSE 
AND 
    ( DATEDIFF( 'dd', "Wiedervorlage", CURDATE( ) ) >= 0 OR DATEDIFF( 'dd', "Datum_Kom", CURDATE( ) ) > 30 )
UNION 
SELECT 
    "Kontakte"."Name", 
    "Dokumente_Kunden"."Datum_Dok", 
    null,
    "Dokumente"."Dokumentenname" 
FROM 
    "Kontakte", 
    "Dokumente_Kunden", 
    "Dokumente" 
WHERE 
    "Dokumente_Kunden"."FK_Kontakt-ID" = "Kontakte"."Kontakt-ID" 
AND 
    "Dokumente_Kunden"."FK_Dokument-ID" = "Dokumente"."Dokument-ID" 
AND 
    DATEDIFF( 'dd', "Datum_Dok", CURDATE( ) ) > 90 
Gruß R
Antworten