sql - 如何按字段过滤包含另一个字段
问题描述
我有一个包含“内容”字段和“国家”字段的表格。我需要检查国家名称是否出现在文本内容中。
内容:
- “法式长棍面包”
- “החומוס הטוב ביותר הוא בישראל”
- “当美国队赢得 4×100 米混合泳接力时,迈克尔·菲尔普斯获得了他的最后一枚金牌。”
国家:
- 法国
- 雅诗兰黛
- 美国
使用 like 子句似乎是正确的选择,但我不知道如何使用 country 字段中的值进行此类检查。
解决方案
使用字典表的幼稚方法:
CREATE TABLE country(id INT, name NVARCHAR(100));
INSERT INTO country(id, name) VALUES (1, 'United States'), (2, 'France'), (3, N'ישראל');
SELECT *
FROM mytable m
JOIN country c
ON m.content LIKE '%' + c.name + '%';
当然,这不是万无一失的解决方案,因为国家可能会因语言和名词大小写而异。
编辑:
如果国家/地区存在于同一行:
SELECT *,
CASE WHEN m.content LIKE '%' + m.country + '%' THEN 'Present' ELSE 'None' END
FROM mytable m
推荐阅读
- android - 在协程上下文中运行模拟方法在 kotlin 中返回 null
- java - Android SDK 中的 Alpha 合成
- spring-boot - Spring Boot 应用程序无法以 2.1.8 启动
- android - 如何修复“未找到方向性小部件”。问题?
- javascript - 如何将自动完成角度材料与动态数据源 (SQL) 一起使用
- java - 如果 vertx setPeriodic 延迟小于其处理程序执行时间会发生什么
- ios - SwiftUI:minimumScaleFactor 没有均匀地应用于堆栈元素
- mysql - 修改旧的 Rails 迁移,然后添加一个调用旧迁移的新迁移
- regex - 使用带引号或不带引号的 grep 正则表达式模式之间的区别?
- c - 在c编程中将十六进制转换为二进制