MySQL 中使用子查询替代 FIND_IN_SET 函数
MySQL 中使用子查询替代 FIND_IN_SET 函数
如果你在使用 MySQL 查询时遇到了SELECT push_label_id FROM oss_push_trump有多条数据,而且不想使用 LIMIT 1 和 IN 语句,你可以考虑使用子查询来替代 FIND_IN_SET 函数。
原始查询语句:
SELECT
opt.*,
t.label_id,
t.label_name
FROM
oss_push_trump opt
LEFT JOIN (
SELECT
GROUP_CONCAT(label_id) AS label_id,
GROUP_CONCAT(label_name) AS label_name
FROM
uc_user_label
WHERE
FIND_IN_SET(uc_user_label.label_id,
(SELECT push_label_id FROM oss_push_trump)
) > 0
) t ON opt.push_label_id = t.label_id
修改后的查询语句:
SELECT
opt.*,
t.label_id,
t.label_name
FROM
oss_push_trump opt
LEFT JOIN (
SELECT
GROUP_CONCAT(label_id) AS label_id,
GROUP_CONCAT(label_name) AS label_name
FROM
uc_user_label
WHERE
label_id IN (SELECT push_label_id FROM oss_push_trump)
) t ON opt.push_label_id = t.label_id;
这里的子查询 SELECT push_label_id FROM oss_push_trump 返回的是多个 push_label_id 值,然后将这些值作为条件使用 IN 子句来过滤 uc_user_label 表中的数据。这样就能够得到与 oss_push_trump 表中的 push_label_id 匹配的 uc_user_label 表中的数据。
总结
通过使用子查询替代 FIND_IN_SET 函数,可以更有效地处理 SELECT push_label_id FROM oss_push_trump 中有多条数据的情况,避免使用 LIMIT 1 和 IN 语句带来的限制。
原文地址: https://www.cveoy.top/t/topic/o3Hw 著作权归作者所有。请勿转载和采集!