首页 > 解决方案 > MySQL在选择时只得到一行重复的结果

问题描述

我有以下选择查询。当存在“ES”行时,我想避免获得重复的“EN”行。喜欢 ES 而不是 EN。

SELECT s.soft_id,s.groupby,s.packageid,s.name,s.area,l.min,GROUP_CONCAT(DISTINCT JSON_ARRAY(s.version,s.detailid,s.filesize,s.updatetime)) versions
FROM software s
INNER JOIN langs l ON s.lang_id=l.lang_id
INNER JOIN devices_type t ON (s.familylock_id=t.familylock_id OR (s.familylock_id=0 AND s.devicelock_id=t.device_type_id))
INNER JOIN devices d ON t.device_type_id=d.device_type_id
INNER JOIN users u ON d.user_id=u.user_id
WHERE s.groupby IN(1,2,3)
AND u.token="abc"
AND d.serialno="123456789" 
AND l.min IN("ES","EN")
GROUP BY s.soft_id,s.groupby,s.packageid,s.name,s.area,l.min ORDER BY s.name ASC

这是示例结果。我想摆脱 AUDI 和 AUTOSEARCH "EN" 行。

图片

标签: mysqlsqlarraysjoinselect

解决方案


下面有帮助吗?我无法验证脚本,因为我没有示例数据,但下面的想法应该可以帮助您设置优先级。

DB小提琴

WITH preference  AS
   (
      SELECT s.*, row_number() OVER (PARTITION BY s.soft_id
      ORDER BY s.packageid,
         CASE
            WHEN l.min = 'ES'
            THEN 'A'
            ELSE 'B'
         END)  priority
      FROM software s
INNER JOIN langs l ON s.lang_id=l.lang_id
WHERE l.min IN("ES","EN")
   )
SELECT  *
FROM preference
WHERE priority = 1;

推荐阅读