我有三张桌子。表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(+)
我正在获得所需的输出
是否有更简单的方法,如在线查询或使用“不存在”使用哪个我可以替换外连接?
答案 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"
}
}
}