我有这样的疑问..。
SELECT 1,2,3
FROM (SELECT CASE WHEN something THEN TO_CHAR(1)... END,2,3
FROM tables WHERE condtions)
WHERE 1 NOT LIKE 'String'所有的列都是varchar2,我在这个查询中得到一个无效的数字错误,指向内部case语句。内部查询分别运行良好。如果删除外部WHERE condtion,则整个查询运行良好。
我知道这与SQL优化器有关,但是我在这里做错了什么,我如何解决这个问题呢?对字符串或外部select语句使用To_CHAR不起作用.
为了更好地理解,
SELECT COL1, COL2, COL3 FROM (
SELECT CASE WHEN LOGIC THEN TO_CHAR(1) ELSE TO_CHAR(0) END AS COL1,
COUNT(SOME_COL) AS COL2 , COUNT(SOME_COL2) AS COL3 FROM TABLES WHERE CONDTIONS
) WHERE COL1 NOT LIKE ‘0’我被告知Oracle SQL优化器正在干扰并导致上述错误,并且必须以不同的方式编写查询。
发布于 2013-03-27 08:46:05
指示1是列名,方法是用后勾包围它。
SELECT 1,2,3 FROM (SELECT CASE WHEN something THEN TO_CHAR(1)... END,2,3
FROM tables
WHERE condtions) WHERE `1` NOT LIKE 'String'发布于 2013-03-27 11:24:01
您需要使用正确的列名(以字母开头)- 1,2,3不起作用(除非引用):
create table tab1 as
select 1 as pk from dual
union all
select 2 as pk from dual
union all
select 3 as pk from dual;
SELECT col1,col2,col3
FROM (SELECT (CASE WHEN 1=2 THEN TO_CHAR(1) else to_char(2) END) as col1 ,
2 as col2,
3 as col3
FROM tab1 WHERE pk > 1)
WHERE col1 NOT LIKE '%1%'https://stackoverflow.com/questions/15654665
复制相似问题