2013-07-02 3 views
0

Когда мы пишем:Что такое 'IN' Пункт Эквивалент SQL Server Для

SELECT * FROM USERS WHERE Username in ('user1', 'user2', 'user3') 

это эквивалентно:

SELECT * FROM USERS WHERE Username = 'user1' OR Username = 'User2' OR Username = 'User3' 

Кроме того, мы можем обеспечить функциональность like шаблона (%) к IN статья?

+2

СООТВЕТСТВЕННО, да и нет. –

ответ

2
Are they equivalent? 

Ans: Да

Но я предпочел бы использовать IN положение, поскольку это более читаемым, то OR пункт в случае большого числа значений.

мы можем обеспечить как функциональность шаблона (%) к статье В

Ans: Нет

Вы не можете использовать, как операции с IN пункта. Если вам нужен шаблон, то вы можете использовать OR, используя такой же оператор.

0

Я использовал бы «in» при работе с многозначными параметрами. В противном случае разница не очень важна, просто предпочтение.

Для вашего второго вопроса: Нет, вы не будете использовать

WHERE Username LIKE '%1' 
OR Username LIKE '%2' 
OR Username LIKE '%3' 
... 
etc. 
0

Да это и не вы не можете. Вы могли бы рассмотреть возможность использования полнотекстового поиска, мультипликатор как с OR, как в вашем вопросе или ДЕЛУ

0

Чем ближе вы можете получить что-то похожее на IN для:

SELECT u.* 
FROM Users AS u 
WHERE u.Username LIKE 'Mar%' 
    OR u.Username LIKE 'Ant%' 
    OR u.Username LIKE '%Geo%' 
    OR u.Username LIKE '%arc' ; 

является использование (проприетарного к SQL- Server) CROSS APPLY:

SELECT u.* 
FROM Users AS u 
    CROSS APPLY 
    (SELECT TOP (1) v.val 
    FROM (VALUES 
      ('Mar%'), ('Ant%'), ('%Geo%'), ('%arc') 
     ) AS v (val) 
    WHERE u.Username LIKE v.val 
) AS x ; 

Испытано на SQL-Fiddle


Одним из преимуществ, которые вы не можете сделать с IN или LIKE ... OR является то, что вы можете иметь строки из основной таблицы возвращается более чем один раз, если у них есть больше, чем один матч:

SELECT u.*, x.val AS MatchingString 
FROM Users AS u 
    CROSS APPLY 
    (SELECT v.val 
    FROM (VALUES 
      ('Mar%'), ('Ant%'), ('%Geo%'), ('%arc') 
     ) AS v (val) 
    WHERE u.Username LIKE v.val 
) AS x ; 
Смежные вопросы