这个 MySQL 查询“LEFT JOIN ON FIND_IN_SET”可以更简化吗?

Posted

技术标签:

【中文标题】这个 MySQL 查询“LEFT JOIN ON FIND_IN_SET”可以更简化吗?【英文标题】:Can this MySQL query "LEFT JOIN ON FIND_IN_SET" be more simplified? 【发布时间】:2020-11-18 09:27:45 【问题描述】:

我正在使用两个表:

tbl_category, "id", "title", "details"

tbl_items, "id" "title", "parents"

现在我正在使用以下查询,但必须使用 'tbl_category' 两次。能不能再简化一点?

SELECT a.id
     , a.title
     , a.details
     , d.itemscount 
  FROM tbl_category a
  LEFT 
  JOIN 
     ( SELECT b.id myid
            , COUNT(c.id) itemscount
         FROM tbl_category b 
         LEFT 
         JOIN tbl_items c 
           ON FIND_IN_SET(b.id,c.parents) 
        GROUP 
           BY b.id
     ) d 
    ON d.myid = a.id

【问题讨论】:

与您的问题无关,但您可能想阅读以下内容:Is adding the ‘tbl’ prefix to table names really a problem? 查看规范化。 【参考方案1】:

这是你想要的吗?

SELECT c.id, c.title, c.details, 
    (
        SELECT COUNT(*)
        FROM tbl_items i
        WHERE FIND_IN_SET(c.id, i.parents) 
    ) AS itemscount
FROM tbl_category c

请注意,将 CSV 列表存储在关系数据库中是不好的设计,应该避免。推荐阅读:Is storing a delimited list in a database column really that bad?。

【讨论】:

非常感谢。这正是我想要的。它是一个旧的数据库记录,作为列表存储在我正在处理的列中。所以不得不以任何方式处理它。非常感谢您的即时帮助

以上是关于这个 MySQL 查询“LEFT JOIN ON FIND_IN_SET”可以更简化吗?的主要内容,如果未能解决你的问题,请参考以下文章

MySql查询select from 两个表与left join on的区别

mysql SELECT LEFT JOIN ON 查询总是超时,大侠能帮忙优化一下吗?

浅谈!SQL语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别

左查询left join on简单总结

sql left join on查询条件不起作用

MySQL中left join on后面的条件和where后面的条件的区别