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 语句带来的限制。

MySQL 中使用子查询替代 FIND_IN_SET 函数

原文地址: https://www.cveoy.top/t/topic/o3Hw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录