2016-04-18 4 views
3

Предположим, что я хотел бы получить двух пользователей из базы данных Sarah Connor и Kyle Reese. Как это сделать, используя как первое, так и второе имя?Выберите значения в двух наборах

select * 
from users 
where 
    first_name in ('Sarah', 'Kyle') and 
    last_name in ('Connor', 'Reese') 

Но этот запрос является неправильным, потому что он будет получать Sarah Reese тоже. Как это исправить? И, запрос должен быть также эффективным с точки зрения производительности .

ответ

5

В MySQL вы можете использовать это:

select * 
from users 
where 
    (first_name, last_name) in (('Sarah', 'Connor'), ('Kyle', 'Reese')) 

В противном случае вы можете использовать:

select * 
from users 
where 
    (first_name = 'Sarah' and last_name = 'Connor') or 
    (first_name = 'Kyle' and last_name = 'Reese') 
+2

Это не для MySQL конкретно - это стандарт SQL , Он также будет работать в других СУБД –

+0

Спасибо, это именно то, что мне нужно! –

+0

Используются следующие функции вне Core SQL-2008: F641, «Конструкторы строк и таблиц»; T051, «Типы строк»; F561, «Полноценные выражения» – jarlh

1

Попробуйте для SQL Server,

select * 
from users 
where first_name + ' ' + last_name in ('Sarah Connor','Kyle Reese') 
+0

Специфичный для продукта ответ, на вопрос без dbms. По крайней мере, скажите OP, для чего это нужно. (Вероятно, дисквалификация индекса тоже ...) – jarlh