Heim  >  Artikel  >  Datenbank  >  Sprechen Sie über das Problem der Einbindung von SQL-Abfragefeldern in Anweisungen

Sprechen Sie über das Problem der Einbindung von SQL-Abfragefeldern in Anweisungen

巴扎黑
巴扎黑Original
2017-08-11 15:08:221541Durchsuche

Apropos SQL-Fuzzy-Abfragen: Das erste, was mir in den Sinn kommt, sollte das Schlüsselwort „like“ sein. Wenn wir Daten abfragen müssen, die ein bestimmtes Feld enthalten, verwenden wir häufig die Abfragemethode „%keyword%“. Spezifische Codebeispiele finden Sie in diesem Artikel

Vorwort

Wenn es um Fuzzy-Abfragen in SQL geht, ist das Erste, was passiert mind sollte das Schlüsselwort like sein.

Wenn wir Daten abfragen müssen, die ein bestimmtes Feld enthalten, verwenden wir häufig die Abfragemethode „%keyword%“. Zum Beispiel:


SELECT ... FROM 表名 WHERE 字段名 LIKE '%关键字%'

Dies sollte als typische „enthält XXX“-Methode betrachtet werden, aber was ist, wenn wir Daten abfragen müssen, deren Felder in bestimmten Zeichen enthalten sind? ?

Zum Beispiel habe ich eine Kontaktdatentabelle ConnectName, die ein Feld zum Aufzeichnen von Namen enthält. Ich möchte die Kontaktinformationen der Personen Xiaolan und Haiyuan erhalten. Unter normalen Umständen fällt uns als Erstes Folgendes ein:


SELECT * FROM ConnectName 
WHERE
  name = '小兰'
  OR name = '灰原'

Dieser Ansatz kann diesen Zweck erreichen. Wenn ich zu diesem Zeitpunkt plötzlich eine andere Person überprüfen möchte, beispielsweise „Conan“, müssen wir die SQL-Struktur ändern und einen Where-Bedingungssatz hinzufügen:


SELECT * FROM ConnectName 
WHERE
  name = '小兰'
  OR name = '灰原'
  OR name = '柯南'

Wir wissen, dass die OR-bedingte Abfrage selbst ineffizient ist und die Strukturänderungsanweisung in MyBatis etwas schwieriger zu implementieren ist (natürlich kann sie auch implementiert werden, indem man einfach die eingefügten Felder durchläuft).

Kann es einfacher sein? Kann ich alle Schlüsselwörter zusammenfassen und nur eine Where-Bedingung verwenden, um dies zu erreichen?

CHARINDEX erscheint

Zu diesem Zeitpunkt können wir das Schlüsselwort CHARINDEX verwenden, um ein bestimmtes Feld zurückzugeben, das in einer Textzeichenfolge erscheint Die Position ähnelt der Verwendung von Strings indexOf. Lassen Sie uns ohne weiteres eine Kastanie angeben:


CHARINDEX('李白','曹操很帅') =0

In der Kastanie oben ist sie nicht enthalten, da Cao Cao ist ein sehr schönes Schlüsselwort, daher kann es nicht gefunden werden, und der Index der Zeichen wird 1 zurückgegeben.

Nachdem wir verstanden haben, wie es verwendet wird, können wir das Schlüsselwort CHARINDEX zur Optimierung verwenden unsere SQL-Anweisung:

CHARINDEX('李白','李白很帅') =1

Wenn der dem Namensfeld entsprechende Name in „Conan Xiaolan Haibara“ erscheint, dann gibt die CHARINDEX-Funktion einen Wert größer als 1 zurück, und wir können die Daten bekommen, die wir wollen (die drei können auch fröhlich zusammen spielen) ^-^)

Die entsprechende mybatis-Implementierung ist auch relativ einfach

SELECT * FROM ConnectName 
WHERE
  CHARINDEX(name ,'小兰灰原柯南')>0

Wenn wir später eine neue Person hinzufügen möchten, beispielsweise Mouri Kogoro, müssen Sie nur „Xiaolan Haibara Conan Mouri Kogoro“ zu den eingehenden Parametern hinzufügen.

Das obige ist der detaillierte Inhalt vonSprechen Sie über das Problem der Einbindung von SQL-Abfragefeldern in Anweisungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn