Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Oracle子句中使用子查询_Sql_Oracle_In Clause - Fatal编程技术网

Sql 在Oracle子句中使用子查询

Sql 在Oracle子句中使用子查询,sql,oracle,in-clause,Sql,Oracle,In Clause,我在为查询的IN子句使用子查询时遇到一些问题。 在..中硬编码。。值允许快速执行查询,但使用子查询会降低执行速度。有没有办法加快查询速度 SELECT col1, col2, col3 FROM table1 WHERE ... and col1 in (SELECT col1 FROM table2) ... *IN子句的值将是字符串列表 SELECT col1, col2, col3 FROM table1 WHERE ... and col1 in ('str1', 'str2', 's

我在为查询的IN子句使用子查询时遇到一些问题。 在..中硬编码。。值允许快速执行查询,但使用子查询会降低执行速度。有没有办法加快查询速度

SELECT col1, col2, col3 FROM table1
WHERE ...
and col1 in (SELECT col1 FROM table2)
...
*IN子句的值将是字符串列表

SELECT col1, col2, col3 FROM table1
WHERE ...
and col1 in ('str1', 'str2', 'str3', ...)
...
以上方法很好

编辑: 我想我把问题简单化了。我尝试执行的查询如下所示:

SELECT col1, col2, col3, ...
FROM table1 t1, table2 t2
WHERE t1.col1 IN (SELECT col FROM table3)
and t1.col2 < 50
and t2.col3 = t1.col3
...
您不能从中写入选择*。如果您给出select*from,它不知道要与表2中的哪一列进行比较。使用所需的列名

SELECT * FROM table1
WHERE ...
and col1 in (SELECT col1 FROM table2)
...
您不能从中写入选择*。如果您给出select*from,它不知道要与表2中的哪一列进行比较。使用所需的列名

SELECT * FROM table1
WHERE ...
and col1 in (SELECT col1 FROM table2)
...
改用JOIN

并保留表1.col1或表2.col3或表1.col3或表3.col中定义的索引:

改用JOIN

并保留表1.col1或表2.col3或表1.col3或表3.col中定义的索引:

请勿在FROM子句中使用逗号。始终使用正确、明确、标准的联接语法。您应该将查询编写为:

SELECT col1, col2, col3, ...
FROM table1 t1 JOIN
     table2 t2
     ON t2.col3 = t1.col3
WHERE t1.col1 IN (SELECT col FROM table3) AND
      t1.col2 < 50;
过滤过程如表1所示;然而,这些列正在与不等式进行比较。我会尝试以下索引:table2col3、table1col2、col1和table3col。

不要在FROM子句中使用逗号。始终使用正确、明确、标准的联接语法。您应该将查询编写为:

SELECT col1, col2, col3, ...
FROM table1 t1 JOIN
     table2 t2
     ON t2.col3 = t1.col3
WHERE t1.col1 IN (SELECT col FROM table3) AND
      t1.col2 < 50;

过滤过程如表1所示;然而,这些列正在与不等式进行比较。我会尝试以下索引:table2col3、table1col2、col1和table3col。

是否可能存在复制/粘贴错误?“从中选择1的副本看起来可疑。@FrankSchmitt。谢谢,不客气。我也从中删除了副本。是否有可能是复制/粘贴错误?“从中选择1的副本看起来可疑。@FrankSchmitt。谢谢,不客气。我也从中删除了副本。