Oracle选择不同的语法错误

时间:2013-02-28 22:51:14

标签: sql oracle boolean

为什么oracle不承认这句话?它说在预期的地方找不到“来自关键字”。它出什么问题了 ?

示例:

select distinct a.id = b.id
from table1 a, table2 b
where a.column = X and b.column =Y;
MySQL允许我这样做。那我应该改变什么?

4 个答案:

答案 0 :(得分:6)

你的问题是a.id = b.id在select子句中是无效的。

编辑

鉴于您对期望布尔结果的评论,也许您正在寻找案例构造。

select case when a.id = b.id then 1 else 0 end BooleanResult
from tablea a join tableb b on something
where etc

答案 1 :(得分:3)

首先,Oracle在SQL中没有布尔数据类型(PL / SQL中有布尔数据类型),因此查询不能返回布尔值。

您可以执行类似

的操作
select distinct (case when a.id = b.id 
                      then 1
                      else 0
                  end)
  from table1 a, 
       table2 b
 where a.column = X 
   and b.column = Y;

但是,我非常不希望你在table1table2之间做笛卡尔积,然后只应用DISTINCT运算符。通常,当他们真正想要做的是添加另一个连接条件时,人们会错误地向查询添加DISTINCT。我希望你真的想要

select distinct (case when a.id = b.id 
                      then 1
                      else 0
                  end)
  from table1 a, 
       table2 b
 where a.some_key = b.some_key
   and a.column = X 
   and b.column = Y;

正确定义加入后,您可能不再需要额外费用DISTINCT

答案 2 :(得分:0)

这是

select distinct a.id, b.id
from table1 a, table2 b
where a.column = X and b.column =Y;

答案 3 :(得分:0)

你也可以在oracle中使用decode

select distinct (decode (a.id,b.id,1,0)) from table1 a, table2 b
    where a.some_key = b.some_key
    and a.column = X ;