SQL - 从多列中选择结果WHERE第1行和第2行为true

时间:2015-04-22 01:01:04

标签: sql

我试图从firstname和lastname在同一行的表中获取人们的生日。我正在处理100个名字,但我无法获得独特的结果。

我已经尝试了IN名字和姓氏,但我得到的是不在同一行的匹配。

示例:表"测试"

FirstName LastName
约翰·多伊 约翰亚当斯 简·多恩 Molly Jetson
玛丽韦恩

SELECT firstname,lastname
FROM test
WHERE lastname IN ( 
'Doe',
'Adams',
'Jetson'
)
AND
firstname IN (
'John',
'John',
'Molly'
);

我只想要名字匹配 第二个列表中的姓氏,但是我得到 ANY 的结果找到名字或找到姓氏,所以我得到了#34; John Doe" AND" Jane Doe"在结果中,因为找到了第一个名字,并且还找到了姓氏。

我想要归还的是:

John Doe 约翰亚当斯 Molly Jetson

NOT: 约翰·多伊 简·多伊 约翰亚当斯 Molly Jetson

3 个答案:

答案 0 :(得分:1)

您可以从SQL Server 2008开始使用表值构造函数

SELECT t1.FirstName , t1.LastName
FROM Test t1 
JOIN (
    VALUES ('John','Doe'),
           ('John','Adams'),
           ('Molly','Jetson')
)t2(FirstName, LastName)
    ON t1.FirstName = t2.FirstName and t1.LastName = t2.LastName

答案 1 :(得分:0)

您需要扩展逻辑以使用andor

SELECT firstname, lastname
FROM test
WHERE (lastname = 'Doe' and firstname = 'John') OR
      (lastname = 'Adams' and firstname = 'John') OR
      (lastname = 'Jetson' and firstname = 'Molly') 

答案 2 :(得分:0)

我建议连接一个更整洁的where子句:

SELECT
firstname,
lastname

FROM
test

WHERE
firstname + ' ' + lastname IN ('John Doe', 'John Adams', 'Molly Jetson')