sqlite 如何在SQL中正确选择?

ca1c2owp  于 2023-01-05  发布在  SQLite
关注(0)|答案(2)|浏览(187)

我有一个表,其中包含一个列表的图像相关的标签。
请在此屏幕截图中查看详细信息:

我尝试了:

SELECT a.* 
FROM wallpaper_tag as a, wallpaper_tag as b 
WHERE a.tag = 1 
  AND b.tag = 2 
  AND a.wallpaper = b.wallpaper 
ORDER BY wallpaper 
LIMIT 10000

这个SQL查询对我来说很好。但是有更好的选择吗?
如果两个标签同时匹配,我想获得一个壁纸列表。

9rygscc1

9rygscc11#

如果您实际需要的是所有wallpaper以及tag12,则可以使用聚合来实现:

SELECT wallpaper 
FROM wallpaper_tag
WHERE tag IN (1, 2)
GROUP BY wallpaper 
HAVING COUNT(DISTINCT tag) = 2
ORDER BY wallpaper 
LIMIT 10000

如果wallpapertag的组合是唯一的,则HAVING子句可以简化为仅:

HAVING COUNT(*) = 2
fafcakar

fafcakar2#

我会使用显式连接:

SELECT a.*
FROM wallpaper_tag as a
INNER JOIN wallpaper_tag as b
ON a.wallpaper = b.wallpaper
WHERE a.tag = 1 AND b.tag = 2
ORDER BY a.wallpaper
LIMIT 10000

我更喜欢这种语法,因为它使连接什么表以及如何连接这些表变得更清楚。

相关问题