这个 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 查询总是超时,大侠能帮忙优化一下吗?