首页 > 解决方案 > 将 MySQL 子查询中的额外列添加到查询结果中

问题描述

所以我有以下 SQL 查询,它应该返回Film表中的所有项目,按它们与电影共有的标签数量排序filmid=2

SET @id = 2;
SELECT * FROM Films
WHERE id IN
    (SELECT at1.filmid,
            Count(at1.tagid) AS common_tag_count
     FROM Taggings AS at1
     INNER JOIN Taggings AS at2 ON at1.tagid = at2.tagid
     WHERE at2.filmid = @id
     GROUP BY at1.filmid
     HAVING at1.filmid != @id
     ORDER BY common_tag_count DESC)

子查询本身可以正常工作,但它返回两列 (filmidcommon_tag_count),这意味着它会导致可预测的“操作数应包含 1 列”错误。

但是我不想让子查询只返回filmid列,我想将该common_tag_count列添加到查询的最终结果中。这可能吗?

标签: mysqlselectsubquery

解决方案


我会将计数作为内联视图,并加入 Films 表。像这样的东西

SELECT f.*
     , c.common_tag_count
  FROM Films f
  JOIN ( -- inline view/derived table
         SELECT at1.filmid
              , COUNT(at1.tagid) AS common_tag_count
           FROM Taggings at1
           JOIN Taggings at2
             ON at2.tagid = at1.tagid
          WHERE at2.filmid   = @id
          GROUP
             BY at1.filmid
         HAVING at1.filmid  != @id
       ) c
    ON c.filmid = f.id   
 ORDER 
    BY c.common_tag_count DESC
     , f.id

推荐阅读