1

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

例子:

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

MySQL 允许我这样做。那么我应该改变什么?

4

4 回答 4

6

您的问题是 a.id = b.id 在 select 子句中时不是有效的 sql。

在下面编辑

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

select case when a.id = b.id then 1 else 0 end BooleanResult
from tablea a join tableb b on something
where etc
于 2013-02-28T22:52:27.880 回答
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;

然而,让我感到非常不可能的是,你真的想在两者之间做一个笛卡尔积,table1然后table2才应用一个DISTINCT运算符。通常,DISTINCT当人们真正想要添加另一个连接条件时,他们会错误地将 a 添加到查询中。我希望你真的想要

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.

于 2013-02-28T23:05:00.317 回答
0

就这个

select distinct a.id, b.id
from table1 a, table2 b
where a.column = X and b.column =Y;
于 2013-02-28T22:53:44.650 回答
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 ;
于 2013-03-01T08:34:44.927 回答