J'ai une table qui a des colonnes comme celle-ci par exemple:
id,col1,col2,col3,col4
Maintenant, je veux vérifier si ANY
of col1, col2, col3, col4
ont la valeur passée.
Le long chemin à faire serait ..
SELECT * FROM table WHERE (col1 = 123 OR col2 = 123 OR col3 = 123 OR col4 = 123);
Je suppose que c'est la version opposée de IN
.
Y a-t-il un moyen plus facile de faire ce que je veux?
Vous pouvez utiliser le prédicat IN
, comme suit:
SELECT * FROM table WHERE 123 IN(col1, col2, col3, col4);
c'est la version opposée de IN.
Non, ce n'est pas, c'est comme si vous utilisiez la variable OR
s comme vous l'avez fait dans votre question.
Le prédicat IN
ou l’appartenance à un ensemble est défini comme suit:1:
Où le Value Expression
peut être soit 2:
Donc, il est bon de le faire de cette façon, en utilisant la valeur expression 123
, qui est un littéral.
1, 2: Images from: Requêtes SQL pour Mere Mortals (R): Guide pratique de manipulation des données en SQL
Vous pouvez faire quelque chose comme: (Remarque: en supposant que les colonnes sont des valeurs numériques. Et, si la valeur concaténée crée la séquence de caractères que vous recherchez, utilisez un délimiteur pour distinguer les valeurs des colonnes. Pipe (|) est le délimiteur utilisé Exemple.)
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) + '|'
)
J'ai eu un problème similaire et résolu de cette façon: SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)
Je ne sais pas si c'est "le meilleur moyen" mais cela fonctionne pour moi.
Pensées?