从多列

时间:2018-04-24 19:34:53

标签: sql oracle plsql oracle11g

所以我有一个表,让我们称之为MAIN表,它有以下示例列

Name,
Code_1,
Code_2,
Code_3,
Code_4,
Code_5

(在我的实例中有25个Code列)

我有一组300个代码插入到临时表中,从MAIN表中获取与临时表中的代码匹配的行的最佳方法是什么?

到目前为止,这是我的工作,但效果似乎非常低效

SELECT * FROM MAIN WHERE (CODE_1 IN (SELECT CODE FROM TMP_TABLE) 
OR CODE_2 IN(SELECT CODE FROM TMP_TABLE) 
OR CODE_3 IN (SELECT CODE FROM TMP_TABLE)
OR CODE_4 IN (SELECT CODE FROM TMP_TABLE)
OR CODE_5 IN (SELECT CODE FROM TMP_TABLE)) 

2 个答案:

答案 0 :(得分:3)

一种方法是使用相关子查询:

SELECT *
FROM MAIN m
WHERE EXISTS (
    SELECT *
    FROM TMP_TABLE t
    WHERE t.CODE = m.CODE_1 OR t.CODE = m.CODE_2 OR ...
)

答案 1 :(得分:2)

加入会更快

SELECT * FROM MAIN 
inner join TMP_TABLE
on main.code_1 = tmp_table.code 
    or main.code_2 = tmp_table.code 
    or main.code_3 = tmp_table.code
    or main.code_4 = tmp_table.code
    or main.code_5 = tmp_table.code

但正如评论中所提到的,如果在主表中多个code_##与tmp_table中的连接条件匹配,则连接可能会增加行数