如何使用 JOIN 仅显示匹配项

How to display only matched items using JOIN

有人可以帮助我使用此类条件使 SQL (ORACLE) 查询更灵活吗?

有2个table:

Table 1

CodeA      Year   

1112-999   2017
1113-999   2017

Table 2

CodeB      Year   

1114-111   2017
1115-111   2018

然后运行这个脚本

SELECT aa.CodeA, bb.CodeB FROM Table 1 aa
JOIN Table 2 bb ON aa.Year = bb.Year
AND REGEXP_LIKE (aa.CodeA, '^111+2');

在这种情况下,结果是:

CodeA      CodeB   

1112-999   1114-111

但在这种情况下,它只需要显示第一个值,并且在 运行ning 脚本之后另一列应该是空的。

例如,

CodeA      CodeB   

1112-999   NULL

但如果列 "CodeB" (Table 2) 包含 value = 1112-534,则该值应出现在 运行ning 之后相同的脚本

例如,

Table 1

CodeA      Year   

1112-999   2017
1113-999   2017

Table 2

CodeB      Year   

1114-111   2017
1112-534   2017
1115-111   2018

并且在 运行 执行相同的脚本后,结果应该是:

CodeA      CodeB   

1112-999   1112-534

根据 table 中的输入数据,我应该在此脚本中更改什么以使其灵活(通用)?我的意思是当 Table 2 不包含预期值时(在本例中为 1112-534),那么结果(对于第二列)应该为 NULL:

CodeA      CodeB   

1112-999   NULL

并且当 Table 2 包含此值 (1112-534) 时,则响应应为:

CodeA      CodeB   

1112-999   1112-534

这是我的脚本,我想让它更灵活:

SELECT aa.CodeA, bb.CodeB FROM Table 1 aa
JOIN Table 2 bb ON aa.Year = bb.Year
AND REGEXP_LIKE (aa.CodeA, '^111+2');

请帮助我))) 在此先感谢。

您可能会发现在过滤之前查看加入结果很有帮助:

SELECT aa.CodeA, bb.CodeB FROM Table1 aa
JOIN Table2 bb ON aa.Year = bb.Year;

您的英文语言规范不是很清楚,但建议您需要 NULL 过滤:

SELECT aa.CodeA, bb.CodeB FROM Table1 aa
JOIN Table2 bb ON aa.Year = bb.Year
WHERE REGEXP_LIKE(aa.CodeA, '^1+2')
and bb.CodeB is not null;

另见 https://en.wikipedia.org/wiki/Join_(SQL)