2017-08-12 40 views
1

有人可以帮助我使用这些条件使SQL(ORACLE)查询更灵活吗?如何仅使用JOIN显示匹配的项目

有2个表:

表1

CodeA  Year 

1112-999 2017 
1113-999 2017 

表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 

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

例如,

CodeA  CodeB 

1112-999 NULL 

但是,如果列 “CodeB”(表2)含有值= 1112-534,则该值应在运行相同的脚本

对于后出现例如,

表1

CodeA  Year 

1112-999 2017 
1113-999 2017 

表2

CodeB  Year 

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

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

CodeA  CodeB 

1112-999 1112-534 

我应该在这个脚本,以便改变根据表格中的输入数据使其变得灵活(通用)?我的意思是,当表2中不包含的预期值(在这种情况下1112-534),然后将结果(第2列)应为NULL:

CodeA  CodeB 

1112-999 NULL 

,并在表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'); 

请帮我)))提前致谢。

+1

请粘贴来自SQL * plus的纯文本,而不是粘贴在stackoverflow上的HTML。简单的'DESCRIBE table'输出将比您发布的

更有帮助。 –

回答

0

您可能会发现它的帮助,查看过滤前加入的结果:

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)

+0

刚编辑它。对不起,这么丑陋的描述。我的第一个问题使用表格。我认为这张表会自动编辑。我也更新了描述。你能否再次审查一下。我试图更清楚地表达我的想法))) – Vladimir

+0

请查看已记录的JOIN变体,特别是https://en.wikipedia.org/wiki/Join_(SQL)#Outer_join左外连接,然后查看您的JOIN没有WHERE子句的正则表达式过滤。发布看起来有希望的任何JOIN结果。首先,您需要确定适当的JOIN关系,然后才能将其过滤到相关的行。 –

+0

谢谢。我认为左外连接将解决我的问题。 – Vladimir

相关问题