mysql - 将 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)
子查询本身可以正常工作,但它返回两列 (filmid
和common_tag_count
),这意味着它会导致可预测的“操作数应包含 1 列”错误。
但是我不想让子查询只返回filmid
列,我想将该common_tag_count
列添加到查询的最终结果中。这可能吗?
解决方案
我会将计数作为内联视图,并加入 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
推荐阅读
- jmeter - Jmeter如何找到存储在字符串中的两次时间差
- php - 无法在 AppServiceProvider 中获取会话变量
- php - 如何让 PhpStorm 理解 Ds\Map 键类型?
- reactjs - 我想从 REDUX REDUCER 中的 REDUX STORE 数组对象访问特定的索引对象
- c++ - C++ OpenCV cv::inRange 函数在另一个范围内工作时不起作用
- java - 有没有办法在JAVA中使用父类的对象调用子类的构造函数?
- c - Valgrind:内存泄漏发生在哪里?
- javascript - 为什么我们需要虚拟 DOM?
- javascript - 如何以允许在网站中使用的方式对我的 JavaScript 代码进行单元测试?
- html - 使用 html 中的箭头导航按钮