MYSQL выбрать «все» значения, а не «любое» из них? - PullRequest
2 голосов
/ 04 октября 2009

этот оператор SQL

"select firstname,lastname from users where lastname in('foo','bar') group by firstname"

это означает выбор всех записей в таблице «пользователи», где фамилия соответствует любому из «foo» или «bar»

Я не хочу этого поведения

я хочу получить все записи в таблице «users», где фамилии соответствуют всем «foo» и «bar»

так есть что-нибудь для этого?

Я знал, что должен заменить в ('foo', 'bar') что-то, но я этого не знаю!?

Спасибо

обновление

например, если в таблице есть эти записи

        firstname | lastname
        user1       foo
        user1       bar
        user2       foo

SQL-запрос должен получить user1, но не user2, поскольку user2 имеет 'foo', но не имеет 'bar'

Ответы [ 3 ]

5 голосов
/ 04 октября 2009

Попробуйте:

select firstname
    ,lastname
from users
where lastname in('foo','bar')
group by firstname
HAVING count(*) = 2

(работает, если не разрешено иметь несколько имен или баров в имени)

или

SELECT u1.firstname
FROM users u1
INNER JOIN users u2
    ON u1.firstname = u2.firstname
    AND u1.lastname = 'foo'
    AND u2.lastname = 'bar'
GROUP BY u1.firstname
3 голосов
/ 04 октября 2009

НЕТ записей, где фамилия совпадает с обеими "foo" И "bar". Как значение может быть одновременно равно двум разным значениям? Это должен быть либо один, либо другой, либо ни один.

Если вы действительно хотите, чтобы все строки, где фамилия равна «foo», ПЛЮС все (другие) строки, где фамилия равна «bar», то то, что у вас уже есть, используя

 In('foo', 'bar')

правильно, хотя ваше использование условия 'group by firstname' не удастся, потому что вы не используете агрегатную функцию в столбце lastName

Исходя из отредактированного вопроса, вы хотите, чтобы все пользователи имели фамилию 'foo' или 'bar' и где есть другой пользователь с таким же именем и другой фамилией.

Select firstName, LastName
From users u
Where lastName In ('foo', 'bar')
  And Exists (Select * From users
              Where firstName = u.firstName
                 And lastName = 
                    Case u.LastName 
                        When 'foo' Then 'bar' 
                        Else 'foo' End)
2 голосов
/ 04 октября 2009
SELECT U1.firstname
FROM Users U1, Users U2
WHERE U1.lastname = 'foo'
    AND U2.lastname = 'bar'
    AND U1.firstname = U2.firstname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...