mysql - 获取比较与另一个表中的所有行匹配的列的行
问题描述
我有两张桌子
表格1
表 2
我想查看表 1 中哪些列标记与表 2 中的一个或多个关键字值匹配的行。
这里的结果应该是
id = 1,3,6
在 id 1 中,78 和 213 都存在,但该行将出现 1 次。
我试过了SELECT * FROM Table1 WHERE tag IN (SELECT keyword FROM table2)
。但它只返回那些开始与表 2 值匹配的行,比如结果只有 3。因为行标签以 10 开头。
解决方案
我们可以FIND_IN_SET
在这里尝试使用:
SELECT t1.id
FROM table1 t1
WHERE EXISTS (SELECT 1 FROM table2 t2
WHERE FIND_IN_SET(t2.keyword, t1.tag) > 0);
请注意,在数据库中存储逗号分隔值通常并不理想,因为它表示非规范化数据。相反,将每个标签值放在单独的行上。
推荐阅读
- flutter - Flutter中让DataTable双向滚动
- html - 当从我的数据库中导入图像并在图库中输出时,它们会变得模糊吗?
- mysql - 在具有多个索引的主键上清除自动增量
- ignite - WAL 写入中的剥离池饥饿导致节点集群节点故障
- javascript - React Context 不能使用 Provider
- batch-file - 如何将 Windows 用户配置文件 SID 从注册表中提取到文本文件中?
- node.js - 脚本完成后,Visual Studio Code 调试器报告“npm ERR!code ELIFECYCLE node.js”
- c# - SSIS 将文件从一个位置复制到另一个位置
- sql - 在 SQL Server 中-如何将 RecID 相同的所有行与 CR/LF 结合起来?
- excel - Excel VBA 命令栏