SQL Query - Verwenden Wie nur, wenn keine genaue Übereinstimmung vorhanden ist?

StackOverflow https://stackoverflow.com/questions/75819

  •  09-06-2019
  •  | 
  •  

Frage

ich habe ein Problem mit einer Abfrage, die zur Zeit verwendet

LEFT JOIN weblog_data AS pwd 
  ON (pwd.field_id_41 != '' 
  AND pwd.field_id_41 LIKE CONCAT('%', ewd.field_id_32, '%'))

Doch die Entdeckung mir, dass ich es brauche, dass nur zu verwenden, wenn es keine exakte Übereinstimmung zuerst. Was ist passiert, dass die Abfrage Double Dipping auf die Verwendung von LIKE zurückzuführen ist, also, wenn es für eine exakte Übereinstimmung prüft zuerst, dann wird es die Double Dip Problem vermeiden. Kann mich jemand mit jeder weiteren Anleitung zur Verfügung stellen?

War es hilfreich?

Lösung

Es klingt wie Sie die Tabellen aliased als PWD und EWD in Ihrem Snippet zunächst auf eine genaue Übereinstimmung der Basis beitreten möchten, und wenn das nicht funktioniert, dann auf ähnlichem Vergleich haben Sie jetzt.

Versuchen Sie folgendes:

LEFT JOIN weblog_data AS pwd1 ON (pwd.field_id_41 != '' AND pwd.field_id_41 = ewd.field_id_32)
LEFT JOIN weblog_data AS pwd2 ON (pwd.field_id_41 != '' AND pwd.field_id_41 LIKE CONCAT('%', ewd.field_id_32, '%'))

Dann in der select-Klausel, verwenden Sie so etwas wie folgt aus:

select
  isnull(pwd1.field, pwd2.field)

Wenn Sie jedoch mit einem Feld handelt, die in pwd null sein kann, die Probleme verursachen wird, sollte diese Arbeit aber:

select
  case pwd1.nonnullfield is null then pwd2.field else pwd1.field end

Sie müssen auch durch eine Gruppe zu tun, stellen Sie sicher, wie das zu pwd2 beitreten werden noch Zeilen der Ergebnismenge hinzufügen, auch wenn Sie die Daten in ihn zu ignorieren enden.

Andere Tipps

Sie sprechen Kurzschlussauswertung.

Werfen Sie einen Blick auf diese Artikel es dir helfen könnten: http://beingmarkcohen.com/?p=62

TSQL verwenden, eine genaue Übereinstimmung läuft, überprüfen Sie für num Zeilen == 0, wenn ja, dergleichen laufen, sonst nicht dergleichen laufen oder ähnliche Ergebnisse unter dem genauen Treffer hinzuzufügen.

kann ich denke nur an es im Code zu tun. Suchen Sie nach einer genauen Übereinstimmung, wenn das Ergebnis leer ist, suchen Sie nach einem LIKE. Eine andere Möglichkeit ist, ein WHERE innerhalb dieser Abfrage, so dass WHERE ({von genauer Übereinstimmung count} = 0), wobei in diesem Fall, es werde nicht durch den Vergleich mit LIKE, wenn die exakten Übereinstimmung mehr als 0 Ergebnisse. Aber es ist schrecklich ineffizient ... nicht die Tatsache zu erwähnen, dass es sinnvoll in Code ist ziemlich schwierig.

i für einen Wenn gehen würde (Anzahl von genauer Übereinstimmung = 0), dann wie Abfrage tun, sonst nur aus genau pass das Ergebnis verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top