所以我有一个表,让我们称之为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))
答案 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中的连接条件匹配,则连接可能会增加行数