Ich habe eine Tabelle, die beispielsweise solche Spalten hat:
id,col1,col2,col3,col4
Nun möchte ich überprüfen, ob ANY
von col1, col2, col3, col4
den übergebenen Wert hat.
Der lange Weg dazu wäre ..
SELECT * FROM table WHERE (col1 = 123 OR col2 = 123 OR col3 = 123 OR col4 = 123);
Ich denke, es ist die entgegengesetzte Version von IN
.
Gibt es eine einfachere Möglichkeit, das zu tun, was ich will?
Sie können das Prädikat IN
wie folgt verwenden:
SELECT * FROM table WHERE 123 IN(col1, col2, col3, col4);
es ist die entgegengesetzte Version von IN.
Nein, es ist nicht. Es ist dasselbe wie wenn Sie OR
s verwenden, wie Sie es in Ihrer Frage getan haben.
Das Prädikat IN
oder die Setmitgliedschaft ist definiert als1:
Wo kann der Value Expression
sein 2:
Daher ist es in Ordnung, dies mit dem Wertausdruck 123
zu tun, der ein Literal ist.
1, 2: Bilder von: SQL-Abfragen für Sterbliche (R): Eine praktische Anleitung zur Datenmanipulation in SQL
Sie können beispielsweise Folgendes tun: (Hinweis: Angenommen, die Spalten sind numerische Werte. Wenn der verkettete Wert nur die gewünschte Zeichenfolge erstellt, verwenden Sie ein Trennzeichen, um die Spaltenwerte zu unterscheiden. Pipe (|) ist hier das Trennzeichen Beispiel.)
SELECT [ID]
,[Col1]
,[Col2]
,[Col3]
,[Col4]
FROM [Table1]
WHERE '123' IN (
CAST([Col1] AS VARCHAR) + '|'
+ CAST([Col2] AS VARCHAR) + '|'
+ CAST([Col3] AS VARCHAR) + '|'
+ CAST([Col4] AS VARCHAR) + '|'
)
Ich hatte ein ähnliches Problem und habe es auf diese Weise gelöst: SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)
Ich bin nicht sicher, ob es "der beste Weg" ist, aber es funktioniert für mich.
Gedanken?