如何替换外连接

时间:2016-06-15 13:11:07

标签: sql oracle join

我有三张桌子。表A表B和表C分别将id1,id2,id3作为主键。

id2是A和C中的外键。

id1是C中的外键。

对于以下查询,我们得到五行

     select * 
     from A 
     where id3=123;  

对于以下查询,我们得到三行

     select * 
     from C 
     where id3=123;

为了获得剩余的两行,我执行了外连接,如

     select * 
     from A,B,C 
     where C.id3=123
     AND A.id1=C.id1(+)

我正在获得所需的输出

是否有更简单的方法,如在线查询或使用“不存在”使用哪个我可以替换外连接?

2 个答案:

答案 0 :(得分:1)

您的语法会生成语法错误。

我推测你想要运行这样的东西:

select a.*
from a left join
     c
     on a.id3 = c.id3 and a.id1 = c.id1
where a.id3 = 123;

但是,我不知道B在那里做了什么;它在查询中,但在问题的其他地方没有。

答案 1 :(得分:0)

外连接是您想要的正确机制,但更标准的语法是:

{
  "query": {
    "match_all": {}
  },
  "script_fields": {
    "distance": {
      "lang": "groovy",
      "params": {
        "lat": 2.27,
        "lon": 50.3
      },
      "script": "doc['geo_coordinates'] ? doc['geo_coordinates'].distanceInKm(lat,lon) : 0"
    }
  }
}