2017-05-10 2 views
1

Ich habe folgende Tabellen verbinden und entfernen: table1 (p, crc, RTI, l1) table2 (p, crc, RTI)Wie links die allgemeinen Felder zwischen zwei Tabellen

Ich möchte alle Datensätze finden von table1 mit gleichen Werten für p und crc mit table2 aber die Datensätze entfernen, die mit den gleichen Werten für p und crc unterschiedliche Werte für rti haben in zwei Tabellen ich

versucht
Select * FROM table1 t1 
LEFT JOIN table2 t2 
ON t1.p = t2.p and t1.crc = t2.crc 

aber nicht wissen, wie man Entfernen Sie die gemeinsamen Datensätze

+1

Ihr Titel sagt "Remove common fields" und Ihre Frage sagt "Remove common records". welches ist es? –

Antwort

0

Ich bin nicht sicher, ob ich völlig verstehe Ihre Frage. Angenommen, Sie haben Datensätze in den Tabellen wie folgt aus: Tabelle 1:

  1. (p, crc, RTI, l1) Werte (1, 23, 6, 8)
  2. (p, crc, RTI, l1) Wert (1, 23, 7, 5)
  3. (p, crc, RTI, l1) Wert (1, 23, 9, 2)

Tabelle 2:

  1. (p , crc, rti) Werte (1, 23, 7)
  2. (p, crc, RTI) Werte (1, 23, 8)
  3. (p, crc, RTI) Werte (1, 23, 9)

Wenn Sie von alle Datensätze zeigen, Tabelle 1 wo table1.rti nicht gleich table2.rti ist, dann versuchen Sie es mit dem folgenden. Dies würde Ihnen Tabelle 1 Zeile 1 (oben) geben.

SELECT t1.* 
FROM table1 t1 LEFT JOIN table2 t2 on 
    t1.p = t2.p AND t1.crc = t2.crc 
WHERE 
    t1.rti <> t2.rti 

Ausgehend von Ihrem Kommentar, versuchen Sie vielleicht den MINUS-Operator.

SELECT * FROM table1 
MINUS 
SELECT t1.* 
FROM table1 t1 LEFT JOIN table2 t2 on 
    t1.p = t2.p AND t1.crc = t2.crc 
+0

Vielen Dank für Ihre Antworten, – Verver

+0

Vielen Dank für Ihre Antworten, mein Q ist, wenn ich Werte (1, 23, 6, 8), (1, 33, 6, 7) in Tabelle1 und Werte (1, 23, 1) habe und (1, 40, 1) in table2, ich will mich nur (1, 33, 6, 8) von table1 zurückgeben und nicht zurück (1, 23, 6, 8) von table1 weil es wert (1, 23 , 1) in Tabelle 2 von denen t1.p = t2.p und t1.crc = t2.crc – Verver

+0

Ist das ein richtiger Ansatz? SELECT * aus Tabelle1 LEFT JOIN Tabelle2 ON t1.p = t2.p und t1.crc = t2.crc WHERE t2.rti IS NULL – Verver

1

Es ist wahrscheinlich besser, die Spalten aufzulisten, die Sie tatsächlich möchten. Aber, wenn die einzigen Spalten, die Sie wollen, dass die Tasten verbinden sind, dann können Sie USING verwenden:

SELECT * 
FROM table1 t1 LEFT JOIN 
    table2 t2 
    USING (p, crc); 
0

Es scheint, als ob Sie alle Datensätze aus table1 ausschließen möchten, wo table2 mindestens einen Datensatz enthält mit gleichen p und gleichen crc aber unterschiedlichen rti. Dies könnte geschrieben werden als "Get alle Datensätze aus Tabelle1, wo kein Datensatz mit dem gleichen und das gleiche crc, aber andere rti existiert in table2".

select * from table1 t1 
where not exists (
    select * from table2 t2 
    where t1.p = t2.p and 
     t1.crc = t2.crc and 
     t1.rti <> t2.rti) 

Ich hoffe, ich habe dich richtig gemacht.

Verwandte Themen