2016-06-14 6 views
0

Ich vergleiche zwei Tabellen und gab die Werte aus, die es nicht in den Zeilen gab.MYSQL mit wo und wie und nicht in

SELECT one, two FROM `table1` WHERE `two` NOT IN 
(SELECT `two2` FROM `table2`) AND `one` NOT IN (SELECT `one1` FROM `table2`) 

Wie kann ich eine ähnliche ... wie Zeile '% zwei' nicht in '% two2' hinzufügen?

i überprüfen mag:

SELECT one, two FROM table1 WHERE LIKE %two NOT IN (SELECT LIKE %two2 FROM table2) 

weil in dieser Tabellen sind von Zeit zu Zeit ein 0 an erster Stelle, aber das i

verblassen muss ich keine Variablen haben nur die Zeilennamen. Kann ich das irgendwie machen?

+0

Haben Sie ein Referenzfeld zwischen 'table1' und' table2'? Weil ich denke, dass Sie diese Bedingung in den inneren Abfragen hinzufügen müssen, etwa so: '(SELECT two2 FROM table2 WHERE table1.two = table2.tow2)' - ** Vielleicht wird das funktionieren: ** 'SELECT one, two FROM table1 WHERE zwei NICHT IN (SELECT two2 FROM table2 WHERE table1.two = table2.two2) UND one NICHT IN (SELECT one1 FROM table2 WHERE table1.one = table2.one1) ' –

Antwort

2

Sie können Ihren Zustand umkehren und stattdessen knifflige LEFT JOIN verwenden. Dann wird Ihre Anfrage wie folgt aussehen:

SELECT one, two FROM `table1` 
LEFT JOIN `table2` ON 
    `table1`.`one` = `table2`.`one1` 
    OR `table1`.`two` = `table2`.`two2` 
    -- List others field comparasion using OR here -- 
WHERE `table2`.`one1` IS NULL; 

Dieser Ansatz wird Ihnen helfen, die Zahl der Unterabfragen zu reduzieren und die Leistung und die Lesbarkeit erheblich verbessern.

+0

Ich meine, ich möchte überprüfen: SELECT eins, zwei FROM 'table1' WO LIKE'% two' NICHT IN (SELECT WIE% two2' FROM 'table2') weil in diesen Tabellen von Zeit zu Zeit eine 0 an erster Stelle steht, aber das muss ich ausblenden – joergi1988

+0

Dann Sie kann 'ON'-Klausel modifizieren und' LIKE'-Operator anstelle von '=' verwenden und 'table2'.one1' erhalten LIKE CONCAT ('%',' table1'.one') – max

+0

ok ich teste es und modifiziere es . Ich habe jetzt kein Referenzfeld zwischen den Tabellen. Ich mache das. Vielen Dank! – joergi1988