sql - SQLDeveloper - 检查另一列中的列
问题描述
我目前正在尝试查询 Last_Name 列是否将后缀添加到 Last_Name 的末尾。
我有一个存储可用后缀(I、II、III、IV、V、Jr.、Sr.)的后缀表(SUFFIX),但是当我执行以下查询时遇到了麻烦,因为它显示了所有姓氏即使它在 LAST_NAME 列的末尾不包含 SUFFIX。
SELECT
NAMES.RECORD_NAME
, NAMES.LAST_NAME
, NAMES.FIRST_NAME
, NAMES.SUFFIX_C AS SUFFIX_ID
, SUFFIX.name AS SUFFIX
, USERS.USER_ID
, NAMES.RECORD_ID
FROM
USERS
left join NAMES ON USERS.NAME_RECORD_ID = NAMES.RECORD_ID
left join SUFFIX ON NAMES.SUFFIX_C = SUFFIX.suffix_c
WHERE
NAMES.SUFFIX_C IS NOT NULL
AND SUFFIX.name in (select NAMES.LAST_NAME from NAMES)
我想要做的是以下内容:如果后缀 = IV 并且姓氏是 SmithIV(包含后缀)在姓氏的末尾以显示在我的结果中。
出于某种原因,后缀被添加到一些姓氏中,我试图确定有多少受到影响。
解决方案
我就是这样理解这个问题的。
第 1 - 15 行代表样本数据;有趣的部分是第 19 - 21 行,它们从姓氏中选择最后的“几个”字符,其中“几个”等于后缀本身的长度。
SQL> with
2 -- sample data
3 names (first_name, last_name, suffix_c) as
4 (select 'Little', 'Foot' , 1 from dual union all
5 select 'Big' , 'FootIV' , 4 from dual union all
6 select 'Scott' , 'TigerSr', 5 from dual union all
7 select 'Mike' , 'Lion' , 6 from dual
8 ),
9 suffix (suffix_c, name) as
10 (select 1, 'I' from dual union all
11 select 2, 'II' from dual union all
12 select 4, 'IV' from dual union all
13 select 5, 'Sr' from dual union all
14 select 6, 'Jr' from dual
15 )
16 -- query you might need
17 select n.*
18 from names n join suffix s on s.suffix_c = n.suffix_c
19 where substr(n.last_name,
20 length(n.last_name) - length(s.name) + 1,
21 length(s.name)
22 ) = s.name;
FIRST_NAME LAST_NAME SUFFIX_C
---------- ---------- ----------
Big FootIV 4
Scott TigerSr 5
SQL>
推荐阅读
- reactjs - 无法安装 apollo/react-hooks ,需要 graphql 的 peer
- entity-framework - 无法为继承 IdentityUser 的类构建带有视图的 Asp.net 核心控制器
- rust - 获取或创建非必填字段选项
- java - 二叉搜索树删除节点功能不删除
- javascript - 从上下文提供者消费返回元素类型无效
- asp.net-core - CGI 应用程序没有返回一组有效的 HTTP 错误。502.3 - 网关错误:Azure ASP.NET Core 应用程序上的转发器连接错误 (ARR)
- javascript - JS - 根据输入类型添加选中或选中
- sharepoint - 可以嵌套查找吗?
- mongodb - 如何通过 id 加入两个文档
- flutter - 如何在 Flutter 中心显示带有图标的文本?