Heim > Datenbank > MySQL-Tutorial > Wann sollte ich in einer WHERE-Klausel ANY anstelle von IN verwenden?

Wann sollte ich in einer WHERE-Klausel ANY anstelle von IN verwenden?

Linda Hamilton
Freigeben: 2025-01-14 20:37:44
Original
294 Leute haben es durchsucht

When Should I Use ANY Instead of IN in a WHERE Clause?

So verwenden Sie ANY anstelle von IN in der WHERE-Klausel

Angenommen, Sie haben eine Abfrage wie MyModel.where(id: ids) in Rails, die SQL mithilfe von IN generiert, das eine Liste von IDs enthält:

<code class="language-sql">SELECT "my_models".* FROM "my_models"
WHERE  "my_models".`"id"` IN (1, 28, 7, 8, 12)</code>
Nach dem Login kopieren

Um ANY anstelle von IN zu verwenden, können Sie Folgendes versuchen:

<code class="language-ruby">MyModel.where("id = ANY(VALUES(#{ids.join '),('}))")</code>
Nach dem Login kopieren

Wenn das Array ids jedoch leer ist, schlägt dieser Ansatz fehl und führt zu einem SQL-Syntaxfehler.

IN und ANY verstehen

IN- und ANY-Ausdrücke haben zwei Formen:

  • expression IN (subquery)
  • expression IN (value [, ...]) oder expression ANY (array expression)

Für die zweite Form erwartet IN eine Liste von Werten, während ANY ein Array erwartet.

Wann ANY und IN verwendet werden sollten

ANY ist eine allgemeinere Option, die mit jedem Operator verwendet werden kann, der einen booleschen Wert zurückgibt. IN ist ein Sonderfall von ANY.

In Bezug auf die Leistung ist ANY nie schneller als = ANY und = ANY ist nicht viel schneller als IN. Die Wahl sollte auf Bequemlichkeit basieren.

Wenn die ID aus einer Datenbank stammt, ist es effizienter, eine Unterabfrage oder JOIN zu verwenden. Um die beste Leistung bei der Übergabe langer Wertelisten vom Client zu erzielen, sollten Sie die Verwendung von Arrays, unnest() oder VALUES-Ausdrücken in Betracht ziehen.

= Syntax von ANY

Postgres akzeptiert die folgenden Formen von Array-Ausdrücken:

  • Array-Konstruktor: ARRAY[1,2,3]
  • Array-Literal: {1,2,3}

Um eine Typkonvertierung zu vermeiden, wandeln Sie das Array explizit um: ARRAY[1,2,3]::numeric[].

So übergeben Sie ein Array von Ruby

Angenommen, id ist eine ganze Zahl:

<code class="language-ruby">MyModel.where('id = ANY(ARRAY[?]::int[])', ids.map { |i| i})</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWann sollte ich in einer WHERE-Klausel ANY anstelle von IN verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage