mysql union 在重复的情况下优先记录来自选择查询之一的记录

标签 mysql sql union

这是我在真实示例中的查询:

     SELECT *
 FROM (

(SELECT Deal.DealID, Deal.TitleEn, Deal.CapNum,Deal.ImageLink,
     SUM( Buy.Quantity ) AS Quantity
 FROM Buy, Deal
 WHERE Buy.DealID = Deal.DealID
 AND Buy.IsFinalBuy =  '1'
 GROUP BY Buy.DealID
HAVING Quantity = Deal.CapNum)

union
(SELECT Deal.DealID, Deal.TitleEn, Deal.CapNum,Deal.ImageLink,NULL AS Quantity
 FROM Deal
 WHERE Deal.EndDate < CURDATE( ) 
)
  )A

  ORDER BY DealID,TitleEn,CapNum,ImageLink,Quantity ASC

如果出现重复,我想优先考虑来自第一个选择查询的记录。

如何实现?

最佳答案

只需为每个值添加一个文字值,然后按它排序。

SELECT * 
FROM   ((SELECT deal.dealid, 
                deal.titleen, 
                deal.capnum, 
                deal.imagelink, 
                SUM(buy.quantity) AS quantity, 
                'A'               sortby 
         FROM   buy, 
                deal 
         WHERE  buy.dealid = deal.dealid 
                AND buy.isfinalbuy = '1' 
         GROUP  BY buy.dealid 
         HAVING quantity = deal.capnum) 
        UNION 
        (SELECT deal.dealid, 
                deal.titleen, 
                deal.capnum, 
                deal.imagelink, 
                NULL AS quantity, 
                'B'  sortby 
         FROM   deal 
         WHERE  deal.enddate < Curdate()))a 
ORDER  BY dealid, 
          sortby, 
          titleen, 
          capnum, 
          imagelink, 
          quantity ASC 

关于mysql union 在重复的情况下优先记录来自选择查询之一的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7823539/

相关文章:

php - 使用 Laravel 4 获取数据库中的所有表

MySQL 连接脚本

php - 如何在同一 SQL 查询期间计算不同表中的行数

sql - 创建查询来填补表中由于数据错误而造成的空白

sql - 金额低于 200 多久了

mysql - LIMIT 在 UNION 中的什么地方适用?

mysql - SQL - Where...In 子句中的选择联合

php - jquery将html写入变量

c# - 将可变数量的参数传递给存储过程

sql - T-SQL OPENJSON 查询中的转义字符