我有几张桌子:
视频
身份证件
查伊
标题
出版日期
频道
身份证件
标题
标签
身份证件
标题
视频标签
身份证
图伊
使用这些表格,我试图选择与使用标签的其他视频相关的视频。在我目前的尝试中,我尝试了以下几点:
SELECT v.id v_id, ch.id ch_id, ch.title ch_title,
v.title v_title, v.date_published v_date_published
FROM videos v
JOIN channels ch ON ch.id = v.ch_id
JOIN video_tags vt ON vt.v_id = v.id
WHERE v.id NOT LIKE 'example_id'
AND (((vt.t_id = 1) + (vt.t_id = 2) + (vt.t_id = 3) + (vt.t_id = 4)) >= 2)
GROUP BY v.id ORDER BY v.date_published LIMIT 10;
但是,这不起作用。我没有错误,但当我知道应该有更多的结果时,我会得到0个结果。
我花了好几个小时思考这个问题并在网上寻找答案。也许我在搜索时用错了词,但我一直找不到解决方法。任何帮助都将不胜感激。
最佳答案
问题是,您正在添加vt.t_id = X
子句中的所有WHERE
比较。一次只执行一行的操作,它不会对每个组中所有行的聚合进行操作。您应该在HAVING
子句中执行此操作,使用SUM()
组合所有行。
SELECT v.v_id, ch.ch_id, ch.ch_title, v.v_title, v.v_date_published
FROM videos v
JOIN channels ch ON ch.ch_id = v.ch_id
JOIN video_tags vt ON vt.v_id = v.v_id
WHERE v.v_id != 'example_id'
GROUP BY v.v_id
HAVING SUM(vt.t_id IN (1, 2, 3, 4)) >= 2
ORDER BY v.v_date_published LIMIT 10;