Dans certains dialectes SQL, vous pouvez dire (quelque chose comme):Existe-t-il une implémentation de cette syntaxe de requête dans TSQL?
SELECT * FROM SomeTable WHERE (val1,val2) IN
(SELECT val1,val2 FROM SomeOtherTable)
Mais je ne sais pas comment faire dans le TSQL (SQL Server 2k) J'utilise.
Je connais (et j'utilise pour l'instant) des solutions de contournement telles que l'utilisation de jointures ou de valeurs concaténées, mais y a-t-il une syntaxe dans TSQL que je néglige de faire? MISE À JOUR: Ceci est une syntaxe SQL-99 valide, c'est pourquoi je considère une jointure une solution de contournement, même si ce serait plus performant. Ma question est peut-être meilleure:
Existe-t-il une implémentation de cette syntaxe dans TSQL?
UPDATE2: Je viens de tester cette syntaxe de Mysql et ça marche bien.
Je n'appellerais pas l'utilisation de jointures _workaround_. Je ne suis pas un expert SQL, mais je suis à peu près certain que JOIN va être beaucoup plus rapide que l'utilisation de IN. – Rake36
@Rake: Dépend de la clause IN. Dans ce cas, les scinder en sous-sélections sera (et en utilisant un filtrage par ligne) plus lent qu'une jointure. – Eric
@Rake: SQL Server peut optimiser. Il existe un algorithme spécial SEMI JOIN spécialement conçu pour de tels cas. C'est plus rapide qu'un JOIN avec DISTINCT ultérieur. – Quassnoi