sql - 在 sql 中将 LIKE 和 IN 与子查询一起使用
问题描述
我正在使用 Oracle SQL,我有以下表格:
用户
UserID | UserPeers | Gender
-----------+--------------+--------
Mike | Tom1, Bob1 | M
John | Tom1, Greg1 | M
Sally |Mike1, John1 | F
Sara | Sally1, Bob1 | F
特殊用户
UserID
-------
Tom1
John1
我正在尝试获取special_users
表中存在对等点的所有用户。
我的尝试:
SELECT *
FROM user
WHERE '%' UserPeers '%' LIKE IN (SELECT UserID FROM special_users)
显然语法是错误的,所以我不确定我会怎么做?
预期结果:
UserID | UserPeers | Gender
-----------+--------------+---------
Mike | Tom1, Bob1 | M
John | Tom1, Greg1 | M
Sally | Mike1, John1 | F
解决方案
您可以将要匹配的字符串和包含userid
要匹配的字符串包装在,
分隔符中,以确保匹配完整userid
(而不是天真地使用LIKE
而不考虑周围的分隔符而只匹配部分userid
)。像这样:
SELECT *
FROM "USER" u
WHERE EXISTS (
SELECT 1
FROM special_user su
WHERE ', ' || u.userpeers || ', ' LIKE '%, ' || su.userId || ', %'
)
其中,对于样本数据:
CREATE TABLE "USER" ( UserID, UserPeers, Gender ) AS
SELECT 'Mike', 'Tom1, Bob1', 'M' FROM DUAL UNION ALL
SELECT 'John', 'Tom1, Greg1', 'M' FROM DUAL UNION ALL
SELECT 'Sally', 'Mike1, John1', 'F' FROM DUAL UNION ALL
SELECT 'Sara', 'Sally1, Bob1, TimTom1', 'F' FROM DUAL;
CREATE TABLE special_user ( UserID ) AS
SELECT 'Tom1' FROM DUAL UNION ALL
SELECT 'John1' FROM DUAL;
注意:我更改Sally
为添加一个TimTom1
即使包含子字符串也不应该匹配的对等Tom1
点。
哪个输出:
用户身份 用户同行 性别 麦克风 汤姆1,鲍勃1 米 约翰 汤姆1,格雷格1 米 莎莉 迈克1,约翰1 F
db<>在这里摆弄
推荐阅读
- powershell - 如何使命令在同一个脚本中多次运行
- python - Pyspark:爆炸阵列慢
- python - PyPI 包在所述包中找不到函数
- javascript - 场变化触发功能
- python - webcolors 安装,但不导入
- raspberry-pi - 树莓派无线接入点wifi信号输出范围
- javascript - 我正在尝试使用 javascript 制作复制按钮
- vulkan - 在 Vulkan 中,我应该如何知道是否需要使用缓冲区使用标志 TRANSFER_SOURCE?
- oauth - apim 中的身份 OAuth 客户端名称
- android - 如何在 Jetpack Compose 中为 LazyColumn 设置默认滚动位置而没有任何反馈或动画