Sql 重用相关子查询的结果
我有一个表media_tags,其中包含两列,将媒体链接到用户定义的标记。我想做一些查询,选择标签上条件复杂的介质。我当前的解决方案是多次使用相同的相关子查询 多个SO答案将我指向CTE,但据我所知,这些答案只能用于替换不相关的子查询 选择outer.media\u id 从媒体_标记为外部 其中1在“从媒体标签中选择标签id作为内部”,其中outer.media\u id=inner.media\u id 和2不在“从媒体标签中选择标签id作为内部”,其中outer.media\u id=inner.media\u id 和3中,从媒体标签中选择标签id作为内部,其中outer.media\u id=inner.media\u id 或在“从媒体标签中选择标签id作为内部”,其中outer.media\u id=inner.media\u id; 使用“不存在”如何 使用“不存在”如何 您可以按媒体id进行自加入、分组,并在HAVING子句中设置条件: 如果这也有效,则更简单,无需自连接检查:Sql 重用相关子查询的结果,sql,sqlite,query-optimization,correlated-subquery,Sql,Sqlite,Query Optimization,Correlated Subquery,我有一个表media_tags,其中包含两列,将媒体链接到用户定义的标记。我想做一些查询,选择标签上条件复杂的介质。我当前的解决方案是多次使用相同的相关子查询 多个SO答案将我指向CTE,但据我所知,这些答案只能用于替换不相关的子查询 选择outer.media\u id 从媒体_标记为外部 其中1在“从媒体标签中选择标签id作为内部”,其中outer.media\u id=inner.media\u id 和2不在“从媒体标签中选择标签id作为内部”,其中outer.media\u id=in
SELECT media_id
FROM media_tags
GROUP BY media_id
HAVING
SUM(tag_id = 1) > 0
AND
SUM(tag_id = 2) = 0
AND
SUM(tag_id IN (3, 4)) > 0
您可以按媒体id进行自加入、分组,并在HAVING子句中设置条件:
如果这也有效,则更简单,无需自连接检查:
SELECT media_id
FROM media_tags
GROUP BY media_id
HAVING
SUM(tag_id = 1) > 0
AND
SUM(tag_id = 2) = 0
AND
SUM(tag_id IN (3, 4)) > 0
我看不到一种方法可以用于复杂的查询,如tag_1和NOT tag_2和tag_3或tag_4;我看不到一种方法可以用于复杂的查询,如tag_1和NOT tag_2和tag_3或tag_4
SELECT media_id
FROM media_tags
GROUP BY media_id
HAVING
SUM(tag_id = 1) > 0
AND
SUM(tag_id = 2) = 0
AND
SUM(tag_id IN (3, 4)) > 0