基于标签的 SQL 查询

2024-03-20

我已经有一段时间没有做过任何 SQL 了,我不确定这个问题是否有一个简单的解决方案。我也有点菜鸟。

我正在尝试构建一个图像库,允许用户使用标签来搜索图像,然后单击其他标签来优化搜索并减少结果数量,但我在所涉及的查询方面遇到了大问题。

这是我当前数据库结构的简化版本:

( 2 个表以及一个附加的多对多链接表)

CREATE TABLE images(
   image_id INT(12) AUTO_INCREMENT,
   image_name VARCHAR(128),
   PRIMARY KEY(image_id)
)ENGINE= INNODB;

CREATE TABLE tags(
   tag_name VARCHAR(64) NOT NULL,
   PRIMARY KEY(tag_name)
)ENGINE= INNODB;

CREATE TABLE images_tags_link(
   image_id_fk INT(12),
   tag_name_fk VARCHAR(64) NOT NULL,
   PRIMARY KEY(image_id_fk,tag_name_fk),
   FOREIGN KEY(image_id_fk) REFERENCES images(image_id),
   FOREIGN KEY(tag_name_fk) REFERENCES tags(tag_name)
)ENGINE= INNODB;

样本数据:

 ===images===
 ___________________________       
| image_id |  image_name    |     
|----------|----------------|     
|     1    |  image_001.jpg |     
|     2    |  image_002.jpg |     
|     3    |  image_003.png |     
|     4    |  image_004.jpg |     
|     5    |  image_005.gif |     
 ---------------------------                                     
 ===tags===                                 
 _______________
|    tag_name   |
|---------------|
| Landscape     |
| Portrait      |
| Illustration  |
| Photo         |
| Red           |
| Blue          |
| Character     |
| Structure     |
 ---------------
===images_tags_link===
 ________________________________
| image_id_fk | tag_name_ fk     |
|-------------|------------------|
|      1      |    Landscape     |
|      1      |    Illustration  |
|      1      |    Blue          |
|      2      |    Blue          |
|      2      |    structure     |
|      2      |    Landscape     |
|      3      |    Illustration  |
|      4      |    Red           |
|      4      |    Portrait      |
|      4      |    Character     |
|      5      |    Blue          |
|      5      |    Photo         |
 --------------------------------

我的问题是以下查询:

我正在寻找一个可以从包含所有用户列出的标签的 IMAGES 表中选择所有“image_names”的查询,例如用户可以搜索“Blue”和“Landscape”标签,该标签应该只输出 image_names“image_001” .jpg' 和 'image_002.jpg'。

===输入===

用户选择的标签:( '蓝色' , '风景' )

===输出===

具有所有列出的标签的 image_names: ( 'image_001.jpg' , 'image_002.jpg' )

提前致谢。


这就是他们所谓的关系部门 http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/,这是一种方法:

SELECT i.*
FROM Images i 
INNER JOIN
(
   SELECT image_id_fk
   FROM images_tags_link
   WHERE tag_name_fk IN ('Blue' , 'Landscape')
   GROUP BY image_id_fk 
   HAVING COUNT(DISTINCT tag_name_fk) = 2
) t ON i.image_id = t.image_id_fk;

SQL 小提琴演示 http://www.sqlfiddle.com/#!2/18422/1

这会给你:

| IMAGE_ID |    IMAGE_NAME |
----------------------------
|        1 | image_001.jpg |
|        2 | image_002.jpg |

这个查询背后的想法是:

   GROUP BY image_id_fk 
   HAVING COUNT(DISTINCT tag_name_fk) = 2

在子查询中,这将确保任何图像都具有两个标签,如果它只有一个,则COUNT将为 0,因此将被消除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于标签的 SQL 查询 的相关文章

  • RedGate ReadyRoll 的替代品了吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种经济实惠的 RedGate ReadyRoll 替代方案 以实现 SQL 的持续部署 我
  • MySQL C++ 连接器未解决的依赖关系(VS 2015)

    我正在尝试在 Windows Visual Studio 2015 上编译 MySQL Connector C 我根据以下内容使用CMake生成了项目文件官方说明 https dev mysql com doc connector cpp
  • 如何将mysql数据库移动到另一个安装点

    我有一个 MySQL 数据库 它变得越来越大 我想将整个数据库移动到另一个安装点 在那里我有足够的存储空间 我希望传输当前数据 并将新数据保存到新位置 软件堆栈 在 FreeBSD 6 上运行的 MySQL 5 当然其他答案也是有效的 但如
  • 选择表中的人员并排除妻子,但合并他们的名字

    我有一张桌子Person PersonID FirstName LastName 1 John Doe 2 Jane Doe 3 NoSpouse Morales 4 Jonathan Brand 5 Shiela Wife And a R
  • MYSQL数据库删除行后需要进行后期优化

    我有一个当前为 10GB 的日志表 它有很多过去两年的数据 我真的觉得目前我不需要那么多 我是否错误地认为在表中保存多年的数据不好 表越小越好 我的桌子都有 MYISAM 引擎 我想删除 2014 年和 2015 年的所有数据 很快我就会删
  • 从 oracle 中为每个组选择最新行

    我在留言簿中有一张包含用户评论的表格 列有 id user id 标题 评论 时间戳 我需要为每个用户选择最新行 我尝试使用 group by 执行此操作 但没有管理它 因为我无法在按 user id 分组的同一查询中选择任何其他内容 SE
  • Sql 查询抛出标识符太长。最大长度为 128

    我正在处理一个简单的更新查询 在执行查询时看到以下错误 我非常清楚 这根本不应该是一个长度问题 可能是什么问题 Error 以identifier开头的标识符太长 最大长度为 128 我的查询 update dbo DataSettings
  • SQL:列出多个连接语句中的重复记录?

    你好 以下查询在连接多个表后返回所有员工 select e from dbo EMP e join dbo HREMP a on a ID e ID join dbo LOGO c on c EMPID e id join dbo LOGO
  • 导出 Azure SQL 数据库时出现错误 SQL71501

    导出 Azure SQL 数据库时出现奇怪的错误 导出一直工作正常 直到最近发生一些架构更改 但现在出现错误 SQL71501 该数据库是V12 兼容性级别130 尽管master数据库仍兼容级别 120 该问题似乎是由一个新的表值函数引起
  • 小数除以小数并得到零

    为什么当我这样做时 select CAST 1 AS DECIMAL 38 28 CAST 1625625 AS DECIMAL 38 28 我得到 0 吗 但是当我得到 0 时 select CAST 1 AS DECIMAL 20 10
  • 如何让 mysql 输出 DateTime 到儒略日数?

    基本上我正在使用用于 Ruby 的 MySQL gem http www tmtm org en mysql ruby 并且我对日期比较没有合理的支持 这Mysql Time类只为我提供了访问器方法 如年 月 秒等 如果我可以将其转换为 R
  • Access SQL 查询:查找表中每个不同条目的最新日期行

    All 我确信这是一个非常简单的 SQL 查询问题 但我确信有一个很好的方法 也有一个非常糟糕的方法来做到这一点 如果由我自己决定 我很可能会得到后者 所以 我在 Access 中有一个表 其中的数据如下所示 ID Value As of
  • varchar(20) 和 varchar(50) 相同吗?

    我看到评论 如果 varchar 20 列中有 5000 万个 10 到 15 个字符之间的值 而 varchar 50 列中有同样的 5000 万个值 它们将占用完全相同的空间 这就是重点varchar 而不是 char 有人可以告诉我原
  • 当添加列较少时追加到现有 SQLite 表,而不将数据库读入 R

    是否有一些简单的方法 无论是在 SQL 端还是在 R 端 将 data frame 附加到具有更多列的现有表 缺失的列应该用 NA 填充 如果它能够优雅地处理比表 1 列数更多的表 2 那么会加分吗 library RSQLite Crea
  • django.core.exceptions.ImproperlyConfigured:加载 MySQLdb 模块时出错:没有名为 MySQLdb 的模块

    我在尝试连接 mysql 数据库时遇到的问题 我还给出了我使用过的数据库设置 Traceback most recent call last File manage py line 10 in
  • 如何授予用户访问 SQL Server 中的 sys.master_files 的权限?

    我需要授予数据库用户读取权限sys master files桌子 我怎样才能做到这一点 目前用户拥有以下权限 Calling SELECT on sys master files返回空结果 我还使用以下命令测试了相同的查询sa用户按预期工作
  • 寻找多列索引的最佳顺序

    假设我有一个包含两个索引的表 一个位于 a 列 一个位于 a b 和 c 列 我注意到 根据索引定义中列的顺序 MySQL 可能最终使用单列索引而不是多列索引 即使多列索引中的所有三列都在 ON 中引用JOIN 的一部分 这有点引出了一个问
  • 选择不带 FROM 但有多于一行的选择

    如何在不从现有表中进行选择的情况下生成 2 行 2 列的表 我正在寻找的是一个返回的选择语句 e g id value 1 103 2 556 Use UNION http dev mysql com doc refman 5 0 en u
  • SQL:两个没有完整列匹配的表的并集

    我有一个table A其中有一组列A1 A2和一个具有一组列的 table bB1 B2 碰巧的是A2 B1但其余列不匹配 也不应该匹配 我想附加表格 所以我使用UNION ALL 对于不匹配的列 我使用null as COLUMN NAM
  • MS-Access 查询中的语法错误(缺少运算符)

    以下查询给了我 missing operator 语法错误 所需的输出是表中数据的组合 dbo tbl 和意见 vw 我用过的所有钥匙都存在 有任何想法吗 SELECT dbo tbl BOD fpartno AS PartNumber d

随机推荐

  • git clone 不签出活动分支

    我有一个远程裸存储库 有两个分支 master 和 testing 其中 HEAD 指 testing 克隆此存储库时 git 检查 master 如果 master 和 testing 位于同一修订版上 即 HEAD test maste
  • Eclipse 任务为空

    我正在使用 Eclipse Helios 并在我的 java 类中添加了一些任务 使用 TODO blah blah 在行计数附近 我有一个小图标 表明任务已被识别 但我在任务视图中看不到它们 我尝试了任务视图和任务列表视图 它们是空的 但
  • 如何在量角器中调用另一个函数中的函数

    第一个功能 describe Shortlisting page function it Click on candidate status Screened function element by css i flaticon lefta
  • 以编程方式将下拉列表添加到特定单元格

    我想知道如何使用 VBA 以编程方式将下拉列表添加到 Excel 工作表的特定单元格 例如 我希望能够向单元格 i j 添加下拉列表并定义列表的元素 以编程方式执行此操作 With Selection Validation Delete A
  • 使用 dapper 查询空间数据

    我找到了一些相关的问题 https stackoverflow com questions 18088169 dapper spatial geography type 但作者放弃了 继续使用存储过程来进行 映射 这实际上是一个延续问题he
  • 如何使用 Laravel Passport 生成短令牌?

    我使用 Laravel Passport 和密码授予模式 我发现它生成的访问令牌很长 如下所示 token type Bearer expires in 31536000 access token eyJ0eXAiOiJKV1QiLCJhb
  • 没有 元素的 selenium 文件上传

    我正在尝试使用 selenium python 上传我的简历here https boards greenhouse io robinhood jobs 996796 app 在简历 简历附件部分下 当我检查 Attach 元素时 它显示为
  • java.lang.OutOfMemoryError:为 ChunkPool::allocate 请求 32756 字节。交换空间不足?

    我正在使用通过 WebLogic 10 3 部署在 HP 服务器上的 java 应用程序 版本信息 WebLogic Version 10 3 OS Version B 11 23 java version java version 1 6
  • 为什么这个工厂返回 $$state 对象而不是 response.data?

    所以我在服务器中有一个对象集合 我想在页面加载时填充 ng repeat 我创建了一个工厂 它从服务器上的资源中获取列表 如下所示 app factory objectArray http function http This is ret
  • 在 Elasticsearch 中搜索所有嵌套子级与给定查询匹配的对象

    给定一个具有以下映射的对象 a properties id type string b type nested properties key type string 我想检索该对象的所有实例 其中所有嵌套子对象都与给定查询匹配 例如 假设我
  • 如何使用 MATLAB 从 WEKA 检索类值

    我正在尝试使用 MATLAB 和 WEKA API 从 WEKA 检索类 一切看起来都很好 但类始终为 0 有什么想法吗 我的数据集有 241 个属性 将 WEKA 应用于该数据集我得到了正确的结果 创建第一个训练和测试对象 然后构建分类器
  • 是/否 - 有没有办法用纯 SVG 工具改进鼠标拖动?

    所以我花了一些时间尝试纯 无外部库 SVG 元素拖动 一般来说 一切正常 但是对于快速移动的鼠标来说存在一个令人讨厌的问题 当用户将可拖动的 SVG 元素靠近其边缘时 然后拖动 鼠标移动 这样的可拖动速度太快 鼠标 失去 可拖动 这里更详细
  • 带有 Picturebox 的 MouseWheel 事件?

    我想将鼠标悬停在图片框 或所有图片和主窗体 上并使用鼠标滚轮滚动 然而我没有运气 我编写了 pictureBox1 MouseWheel 并检查了增量 我在它 0 时设置了一个断点 到目前为止 无论我做什么 我都无法发生任何事情 我也尝试过
  • 在 UI-Grid 标题中实现多列分组有更好的方法吗?

    我尝试使用以下方法在 UI Grid 的列标题级别实现多列分组 我遵循的步骤 包括 UI 网格的以下标题单元格模板以及另一个 UI 网格行 div class ui grid header custom ui grid header div
  • 在动态创建的 Web 应用服务中添加自定义域

    我使用 REST API 创建了 azure Web 应用程序 是否有任何选项可以使用rest api 自定义域映射 通过下面的链接 我创建了新的网络应用服务 https learn microsoft com en us rest api
  • Ionic 3 启用单页滑回功能

    我已在根组件和模块配置中全局禁用 向后滑动
  • 替换三元运算中已弃用的“define(@array)”

    我有以下需要更正的代码 如defined array 在最新的 Perl 中已弃用 my inputs defined padSrc gt inouts padSrc gt inouts defined padSrc gt inputs p
  • 从“void*”到“unsigned char*”的转换无效

    我有以下代码 void buffer operator new 100 unsigned char etherhead buffer 尝试编译时 我收到该行的以下错误 error invalid conversion from void t
  • 上下移动 ListViewItems

    我有一个 ListView WinForms 我想通过单击按钮来上下移动项目 要移动的项目是已检查的项目 因此 如果选择了第 2 6 和 9 项 当我按下向上移动按钮时 它们将变为 1 5 和 8 并且这些位置上的项目将向下移动一步 我觉得
  • 基于标签的 SQL 查询

    我已经有一段时间没有做过任何 SQL 了 我不确定这个问题是否有一个简单的解决方案 我也有点菜鸟 我正在尝试构建一个图像库 允许用户使用标签来搜索图像 然后单击其他标签来优化搜索并减少结果数量 但我在所涉及的查询方面遇到了大问题 这是我当前