请查看下面SQLFiddle链接中的SQL。
http://sqlfiddle.com/#!9/22e094/4
我的目标是获取Table1中的所有记录,如果表2中存在SecId,则仅在状态为“Y”时才加入。
结果应该是它从表1中取出:ID 1和2.对于ID 1,它成功地离开了连接Table2并拉出'Y'
正如你在小提琴中看到的那样,我尝试了3种不同的方式,但似乎无法得到它。
让我难过......帮助真棒! :)
答案 0 :(得分:0)
左连接,只有ON
子句中的连接条件,没问题。
但是,您表示只有当 status
存在于时,您才希望'Y'
为secid
的行保持不变table2
。这意味着您还希望保留secid
table2
NULL
为select *
的行。
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.