【发布时间】:2014-12-05 18:02:05
【问题描述】:
下面是我正在使用的两个表,以及表中的列:
**## 表格1 ##** 带有样本数据的受赠人列 受赠人 ---------- CLAT CLATX1 DJSD DJDX3 ADKS ADKSX5 大韩民国 **## 表 2 ##** 带样本数据的 Inact_ID 列 Inact_ID ---------- CLAT DJSD ADKS 大韩民国使用以下查询:
SELECT DISTINCT A.GRANTEE
FROM TABLE1 A
WHERE
EXISTS(SELECT 1
FROM TABLE2 B
WHERE A.GRANTEE= B.INACT_ID);
这些是我的结果:
CLAT
DJSD
ADKS
大韩民国
返回 4 个字符 ID - 不是我想要的一切(还希望 6 个字符 ID 与 4 个字符 ID 相关联)
除了获得这 4 个字符 ID 之外,这 4 个字符 ID 中的一些还具有另一个具有以下命名约定的 ID - A02WXn,其中 X 是一个常数,n 是 0-9 之间的一个数字,即 6字符标识。我希望能够包含 6 个字符的 ID,如果它与 4 个字符的 ID 一起存在。 6 个字符的 ID 仅存在于表 1 中。
更新:我认为我可能更接近解决方案,希望这可以进一步阐明我想要的结果。
SELECT A.GRANTEE FROM TABLE1 A INNER JOIN (SELECT B.INACT_ID FROM INACTIVE_USERS B) ON A.GRANTEE LIKE '%' || B.INACT_ID || '%';
【问题讨论】:
-
...WHERE LEFT( A.GRANTEE, 4 ) = B.INACT_ID怎么样? -
Artjom B. - 感谢您的编辑。 mustaccio - 我很感激你的回应!当我编辑 WHERE CLAUSE 以匹配您所拥有的内容时,我得到不正确的结果。我返回的 ROWS 不仅仅是 4 或 6 个字符。我只想要 4 个字符 ID 及其相关的 6 个字符 ID(如果存在)。谢谢
-
那你需要提供更有意义的样本数据,包括例外情况。我的建议将与您现有的示例完美配合。
-
Mustaccio - 我更新了更多信息。我希望这会有所帮助。
-
我能够在两个表中匹配前 4 个字符位置,但我只希望结果集始终包含 4 个字符 ID 及其关联的 6 个字符 ID(如果存在)。我不希望返回除 4 个字符(ASDF)或 6 个字符(ASDFXn ID's)以外的其他值,如果它们与关联的 4 个字符 ID 一起存在的话。现在,只要前 4 个字符匹配,无论它们有多少个字符,我都会得到值。我觉得我更接近了,但仍然无法弄清楚这一点。我只需要 ASDF 和 ASDFXn ID。仅返回 4 或 6 个字符。这有助于澄清吗?