【问题标题】:Can this MySQL query "LEFT JOIN ON FIND_IN_SET" be more simplified?这个 MySQL 查询“LEFT JOIN ON FIND_IN_SET”可以更简化吗?
【发布时间】: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

【问题讨论】:

标签: mysql sql csv count left-join


【解决方案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?

【讨论】:

  • 非常感谢。这正是我想要的。它是一个旧的数据库记录,作为列表存储在我正在处理的列中。所以不得不以任何方式处理它。非常感谢您的即时帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 2013-02-10
  • 1970-01-01
相关资源
最近更新 更多