2017-06-05 2 views
0

Sorry, wenn meine Frage auf den ersten nicht klar ist.Wie alle Werte von der ersten Tabelle abzufragen und mit der zweiten Tabelle zu füllen

Ich habe diese drei Tabellen:

Table A: 
ID | DATE_CREATED 

Table B: 
ID | DATE_CREATED 

TABLE C: 
ID | DATE_CREATED 

Was ich will, ist alle Daten aus Tabelle A bekommen, wenn ID A und B gleich sind:

SELECT A.DATE_CREATED 
FROM A, B 
WHERE A.ID = B.ID 

Nun, was ich nicht bekommen, ist, wie man alle Daten aus Tabelle C erhält und sie in die obige Abfrage einfügt, so dass nur diejenigen in die Abfrage eingefügt werden, die in dieser Abfrage nicht vorhanden sind.

Wenn also die Abfrage Ausgänge

ID | DATE_CREATED 
1 |  2010 
2 |  2009 
3 |  2008 

und Tabelle C enthält

ID | DATE_CREATED 
1 |  2017 
2 |  2005 
3 |  2003 
4 |  2007 
5 |  2010 

sollte Ihr Endergebnis sein

ID | DATE_CREATED 
1 |  2010 
2 |  2009 
3 |  2008 
4 |  2007 
5 |  2010 

Danke meine Frage zum Lesen! Ich bin mir bewusst, dass diese Frage vielleicht bereits beantwortet wurde, da sie grundlegend ist, aber sogar durch das Lesen einiger ähnlicher Fragen ist mein Gehirn nicht in der Lage, dies zu verarbeiten. Ich vermute, es ist mit einem linken Join oder etwas ähnlichem von dem, was ich gelesen habe, aber ich verstehe nicht, wie es funktioniert, auch wenn ich Beispiele überprüfe und diese Join-Graphen überprüfe. Hier

Antwort

1

Verwenden join Aussagen und es wird viel einfacher:

SELECT COALESCE(A.ID, C.ID), COALESCE(A.DATE_CREATED, C.DATE_CREATED) 
FROM A 
    INNER JOIN B ON A.ID = B.ID 
    FULL JOIN C ON A.ID = C.ID 
WHERE A.ID != C.ID 
+0

Vergessen Sie nicht, diese COALESCE() Spalten Alias. Andernfalls können sie nicht referenziert werden. – Shawn

+0

Ich habe Ihre Methode verwendet, funktioniert wie ich wollte, danke! Coalesce macht genau das, was ich will! –

1

ist eine Methode:

WITH ab as (
     SELECT A.ID, A.DATE_CREATED 
     FROM A JOIN 
      B 
      ON A.ID = B.ID 
    ) 
SELECT ab.* 
FROM ab 
UNION ALL 
SELECT c.ID, c.DATE_CREATED 
FROM c 
WHERE c.ID NOT IN (SELECT ID FROM ab); 
1

Zur Klarstellung:

Sie wollen

A.ID, A.DATE_CREATED 
anzuzeigen

, oder wenn es keine Übereinstimmung zwischen A und B ID-Felder sind dann Sie

C.ID, C.DATE_CREATED 

So anzeigen möchten, haben Sie bereits herausgefunden, wie das erste Bit zu erhalten:

SELECT A.ID, A.DATE_CREATED 
FROM A 
INNER JOIN B 
ON A.ID = B.ID 

Hinzufügen zu die anderen 2 Antworten, hier ist, wie ich es Old-School mit temporären Tabellen tun würde:

Verwandte Themen