【问题标题】:SQL - select results from multiple columns WHERE row 1 and row 2 are trueSQL - 从多列中选择结果,其中第 1 行和第 2 行为真
【发布时间】:2015-06-29 10:08:03
【问题描述】:

我正在尝试从名字和姓氏在同一行的表中获取人员的生日。我正在处理 100 个名称,但我无法获得唯一的结果。

我已尝试输入名字和姓氏,但我得到的匹配项不在同一行中。

示例:表“测试”

名字 姓氏
约翰·多伊
约翰·亚当斯
简·多伊
莫莉·杰特森
玛丽·韦恩

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

我只想要第二个列表中名字匹配姓氏的情况,但是我得到ANY结果,其中名字是found OR the lastname is found,所以我在结果中同时得到“John Doe”和“Jane Doe”,因为找到了名字并且还找到了姓氏。

我想要返回的是:

约翰·多伊 约翰亚当斯 莫莉·杰特森

不是: 约翰·多伊 简·多伊 约翰亚当斯 莫莉·杰特森

【问题讨论】:

    标签: sql


    【解决方案1】:

    你需要扩展逻辑来使用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】:

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

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

      【讨论】:

        【解决方案3】:

        您可以从 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
        

        【讨论】:

          猜你喜欢
          • 2013-03-02
          • 1970-01-01
          • 2011-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-03
          • 1970-01-01
          相关资源
          最近更新 更多