mysql - 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" 行。
解决方案
下面有帮助吗?我无法验证脚本,因为我没有示例数据,但下面的想法应该可以帮助您设置优先级。
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;
推荐阅读
- gcc - GCC:在 ARM 上的裸机软件中包含 math.h 函数(arm-none-eabi-gcc)
- javascript - 正则表达式 - 反应原生中未处理的 js 异常
- mariadb - Thoug max_allow_packet 为 1 G ,出现“ERROR 2006 (HY000): MySQL server has gone away”
- android - 如何在android清单文件中设置纵向和横向
- java - 空格的修剪在 SOAP 请求中不起作用
- signtool - SignTool 零星报 EXEC 这个文件格式无法签名,因为无法识别
- c# - Blazor @onclick 事件以关闭循环内的单个项目
- javascript - 每 20 秒更新一次 XMLHTTPRequest 的内容
- azure - Azure Durable 功能崩溃
- node.js - 在 Azure Functions 中通过 nodeJS 生成 excel