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
Linda HamiltonOriginal
2025-01-14 20:37:44310Durchsuche

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>

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

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

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>

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!

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