SQL帮助,左边连接过滤器

时间:2017-03-14 03:13:22

标签: sql oracle

请查看下面SQLFiddle链接中的SQL。

http://sqlfiddle.com/#!9/22e094/4

我的目标是获取Table1中的所有记录,如果表2中存在SecId,则仅在状态为“Y”时才加入。

结果应该是它从表1中取出:ID 1和2.对于ID 1,它成功地离开了连接Table2并拉出'Y'

正如你在小提琴中看到的那样,我尝试了3种不同的方式,但似乎无法得到它。

让我难过......帮助真棒! :)

1 个答案:

答案 0 :(得分:0)

左连接,只有ON子句中的连接条件,没问题。

但是,您表示只有当 status 存在于时,您才希望'Y'secid 的行保持不变table2。这意味着您还希望保留secid table2 NULLselect *的行。

secid不会飞,因为您在两个表中都有相同名称的列where。你必须区分它们(通过给它们别名 - 或至少其中一个;我给它们两个别名)如果你需要在SELECT子句或查询中的任何其他地方引用它们来打破它们歧义。并且,由于别名只能在WHERE子句中给出,该子句是在select id, secid_a, secid_b, status from ( select a.id, a.secid as secid_a, b.secid as secid_b, b.status from table1 a left join table2 b on a.secid = b.secid ) where status = 'Y' or secid_b is null; 子句之后计算的,因此您需要在子查询中执行左连接。

var beaches = [
  ["location 1", 18.7061, 98.9817],
  ["location 2", 18.7669, 99.0905]
];
var markers = [];
var map;
var markerCluster;// Declare here.