mysql - UNION MYSQL中的三个不同的SELECT

标签 mysql select union

我有一个名为MYSQL的MYSQL表,其列为:id | firstname | lastname | birthdate | phone。

我对MYSQL还是很陌生,我正尝试将几个SELECT联合起来,以便结果以以下方式显示:


仅必须显示前20个结果
第一个SELECT条件是由firstname + lastname + birthdate组合而成的:WHERE(birthdate =“ 1980-01-01”)AND((firstlike LIKE“%john%”)AND(Lastname Like“%smith%”)
第二个SELECT条件是按姓氏和姓氏的组合:WHERE(姓氏为“%john%”)和(姓氏为“%smith%”)
第三个SELECT条件是通过电话:WHERE phone =“ 0123456”
输出结果实际上必须包含3列:order | id | type;其中“订单”和“类型”是别名列
导出的ID必须是唯一的:如果所有3个SELECT(或多个SELECT)产生相同的ID,则该ID在输出表中必须仅出现一次
“订单”列的第一个SELECT结果必须为1,第二个SELECT必须为2,最后一个SELECT必须为3
如果一个以上的SELECT产生相同的ID值,则其行必须具有最高顺序值;从第一个SELECT最高可能的序号是1,
别名列“ type”必须按以下方式工作:如果第一个SELECT产生了id,则其类型值为“〜firstname + lastname + birthdate〜”;如果从第二个SELECT产生一个id,则其类型值为“〜firstname + lastname〜”;最后,如果第3个SELECT产生ID,则其类型值为“〜phone〜”
如果一个以上的SELECT产生相同的ID值,则“类型”别名列上的值必须是找到该ID的SELECT之间的保留值(例如,如果相同的ID导致所有3个SELECT查询,则该值在“类型”列上将是“〜名字+姓氏+生日~~名字+姓氏~~电话〜”)


是否可以实现这样的输出?

最佳答案

这是一些使用CASE语句的东西。我认为,由于您的订单类型声明,您将对联合声明感到困惑。希望我已经了解了您的要求-如果发布示例数据,这会容易得多!无论如何,即使这并不能完全满足您的要求,您也会明白...。

[编辑]我不认为您需要与众不同,但我也不认为这很痛...

 SELECT DISTINCT 
        CASE WHEN birthdate='1980-01-01' 
                AND firstname LIKE '%john%' AND lastname LIKE '%smith%'
             THEN 1
             WHEN firstname LIKE '%john%' AND lastname LIKE '%smith%'
             THEN 2
             WHEN phone='0123456'
             THEN 3
        END AS outputorder, -- avoid confusion of using an SQL keyword as a column name,
           id,

           CONCAT(
              CASE 

     WHEN birthdate='1980-01-01' 
            AND firstname LIKE '%john%' AND lastname LIKE '%smith%'
            THEN CONCAT('~',firstname,'+',lastname,'+','~')
          END ,

         CASE WHEN firstname LIKE '%john%' AND lastname LIKE '%smith%'
             THEN CONCAT('~',firstname,'+',lastname,'~')
         END ,
         CASE WHEN phone='0123456'
              THEN CONCAT('~',phone,'~')
         END 
       ) -- end the concat
       AS outputtype
FROM

     mytable
WHERE
   ( birthdate='1980-01-01' 
   AND firstname LIKE '%john%' AND lastname LIKE '%smith%')
OR
   (firstname LIKE '%john%' AND lastname LIKE '%smith%')
OR
    phone='0123456'
ORDER by 1,2 LIMIT 20

关于mysql - UNION MYSQL中的三个不同的SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27227464/

相关文章:

mysql - 在数据库中选择奇怪的语法

mysql - 在 MySQL 中,我可以编写一个查询来查找给定月份是否有两个日期之间的任何日期?

select - Javascript选择选择列表的第一个选项

mongodb - 如何从 Mongodb 中的两个不同集合合并?

sql - mysql select查询帮助--ORDER BY

javascript - 如何显示带有不需要的扩展名的文件的上传错误?

mysql - 如何在 MySQL 中对多个表进行 FULL JOIN

java - 从具有自动增量值的两个不同表中插入一个表

mysql - 我需要一个MySQL查询来进行优化

mysql - 基于一个公共(public)列连接具有不同列和格式的两个表 - 需要显示重复项