此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'
答案 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