sql - 加入选定的位数
问题描述
ddm_zip 列只有 5 位邮政编码。tt_pad_zip 列包含 2-5 之间的任何值。我想执行一个连接选择出现在表格两侧的值。
但是,tt_pad_zip 具有各种级别的粒度。
例如,当我们在 tt_pad_zip 中看到 55 的值时,它正在考虑所有以 55 开头的邮政编码,例如 551...553...55636 等。因此我希望连接选择这个。
例如,当我们在 tt_pad_zip 中看到 558 的值时,它正在考虑以 558 开头的所有邮政编码,例如 5581...5585...558743 等。因此我希望连接选择这个。
但是,如果 tt_pad_zip 中有一个值具有与 ddm_zip 相同的邮政编码,例如 58636,如下所示,我希望输出选择这个。
column: ddm_zip column: tt_pad_zip
55636 55
57254 5734
58636 57254
58636
解决方案
我认为您正在寻找类似以下的内容:
-- Sample Data:
WITH dat (ddm_zip, tt_pad_zip) AS
(SELECT 0,55 FROM dual
UNION ALL
SELECT 1,5734 FROM dual
UNION ALL
SELECT 2,57254 FROM dual
UNION ALL
SELECT 3,55636 FROM dual
UNION ALL
SELECT 55636, 99 FROM dual
UNION ALL
SELECT 57254, 88 FROM dual
UNION ALL
SELECT 57341, 77 FROM dual)
-- Query:
SELECT d2.ddm_zip, d1.tt_pad_zip
FROM dat d1
JOIN dat d2
-- Join the data via like:
ON d2.ddm_zip LIKE d1.tt_pad_zip || '%'
-- Exclude the data where a "better" match exists:
AND NOT EXISTS (SELECT 1 FROM dat d3
WHERE d2.ddm_zip LIKE d3.tt_pad_zip || '%'
AND LENGTH(d1.tt_pad_zip) < LENGTH(d3.tt_pad_zip))
推荐阅读
- php - 如何在 laravel 视图中显示数组数据
- amazon-web-services - 将数据从 Elastic Search 集群复制到 DDB 的最佳方式
- android - android - 当字符串在 RecyclerView 项目上达到显示最大显示宽度时换行
- angular - 角度材料:动态数据的垫表多列过滤器
- flutter - 关于如何显示内容取决于异步调用的小部件的最佳实践?
- java - 如果没有值,Java 流返回 0
- symfony - 在作曲家中安装注释
- typescript - Typescript 对象初始化程序错误,用于在构造函数简写中声明的默认属性的可选
- html - TypeError:无法读取 reactJS 中未定义的属性“拆分”
- python - 当我按下屏幕键盘按钮时,刽子手无法正常工作