MYSQL选择“全部”值而不是“任何”值?

时间:2009-10-04 00:40:34

标签: sql mysql database

此SQL语句

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

表示选择表“users”中所有记录,其中lastname与“foo”或“bar”中的任何一个匹配

我不想要这种行为

我要检索的是“users”表中的所有记录,其中lastnames匹配所有“foo”和“bar”

那有什么可以做的吗?

我知道我应该用('foo','bar')取代某些东西,但我不知道那件事!?

由于

更新

例如,如果表有这些记录

        firstname | lastname
        user1       foo
        user1       bar
        user2       foo

SQL查询应检索user1但不检索user2,因为user2具有'foo'但没有'bar'

3 个答案:

答案 0 :(得分:5)

尝试:

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

答案 1 :(得分:3)

没有记录,其中lastname匹配“foo”和“bar”值如何同时等于两个不同的值?它必须是一个或另一个,或者两者都不是。

如果你真的想要lastname等于“foo”的所有行,请加上lastname等于“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 :(得分:2)

SELECT U1.firstname
FROM Users U1, Users U2
WHERE U1.lastname = 'foo'
    AND U2.lastname = 'bar'
    AND U1.firstname = U2.firstname