为什么oracle不承认这句话?它说在预期的地方找不到“来自关键字”。它出什么问题了 ?
示例:
select distinct a.id = b.id
from table1 a, table2 b
where a.column = X and b.column =Y;
MySQL允许我这样做。那我应该改变什么?
答案 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;
但是,我非常不希望你在table1
和table2
之间做笛卡尔积,然后只应用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 ;