2017-11-16 4 views
1

Ich habe zwei TabellenAccess SQL Vermeiden Kartesisches Produkt mit Instr = 0 oder Not Like

T1  T2 
list  remark 
abc  this is my list 
def  i have abc remark 
ghi  other than I have def comment 
jkl  ghi is also there 
      and this one will 
      and this one too 

Ich versuche, eine Abfrage zu schreiben, die alle Bemerkungen in T2 zurück, die nicht die Liste in T1 gefallen sind.

Ich habe sowohl Instr und Join mit Not Like versucht, aber bin auf dem kartesischen Produkt Problem fest. auch dort

eine Abfrage läuft, auf dem Instr = True Gibt die Liste I

SELECT DISTINCT t2.remark, InStr([t2].[remark],[t1].[list]) AS [Check] 
FROM t2, t1 
WHERE (((InStr([t2].[remark],[t1].[list]))=True)); 

ghi erwarten ist
I abc Bemerkung
andere haben als ich def

Kommentar haben aber läuft für False ist, wo ich alle Ergebnisse, aufgrund der kartesischen Produkt:

Samt mit Not Like

SELECT DISTINCT t2.remark 
FROM t2 LEFT JOIN t1 ON t2.Remark NOT LIKE "*" & t1.List & "*" 

mit Ich habe auch sub-Abfragen versucht, aber kein Glück. Irgendeine Idee, wie ich das mit Access SQL lösen kann?

Ich nehme an, ich könnte die Anweisung mit TRUE schreiben dann eine andere Abfrage, wo die Bemerkungen nicht gleich das Ergebnis meiner ersten Abfrage, aber das scheint ein bisschen ineffizient.

Antwort

1

Der üblicher Weg (zumindest in Access) ist wie folgt:

SELECT tr.remark 
FROM t2 LEFT JOIN t1 
    ON t2.Remark LIKE "*" & t1.List & "*" 
WHERE t1.List IS NULL 

obwohl ich nicht sicher bin, ob ich das jemals mit LIKE verwendet habe.

1

@Andre schlug mich um ein paar Minuten.

Dies scheint auch zu arbeiten und gibt 3 Datensätze

SELECT remark 
     , list 
FROM T1 LEFT JOIN T2 ON INSTR(T2.remark,T1.list)>0 
  1. Ich habe abc Bemerkung/abc
  2. anders als ich def haben Kommentar/def
  3. ghi auch dort ist/ghi

Entschuldigung ... das Gegenteil ist der Fall.

Verwendung:

SELECT remark 
     , list 
FROM T2 LEFT JOIN T1 ON INSTR(T2.remark,T1.list)>0 
WHERE list IS NULL 
  1. das ist meine Liste/NULL
  2. und diese wird/NULL
  3. und dieses zu/NULL
+1

Ich mag, dass ich versuchte, sowohl "Instr" als auch "Like" und bekam Antworten für beide :) –