我想在where子句中创建一个条件,可以模仿左连接。例如:
From Table1, Table2 Where table1.ID *= table2.ID
需要写成
From Table1, Table2
Where Table1.ID = Table2.ID AND (some condition to get the rows from table1 where match does not exist)
我想这样做,因为现有的查询构建器函数调用十几个函数来创建最终查询,并且从100多个页面调用相同的函数。因此,更新FROM子句以使用Left Join
将打破整个流程,并引起很多麻烦。我宁愿只更新WHERE子句本身。
答案 0 :(得分:1)
通常,where
子句不能增加结果集中的行数。因此,您无法在left join
子句中正式复制where
。
那就是说,这可能会做你想做的事情:
From Table1, Table2
Where (Table1.ID = Table2.ID or
not exists (select 1 from table2 t2 where t2.id = table1.id)
)
这并没有正式复制left join
。例如,如果Table2
为空,则from
子句根本不返回任何行,因此不返回任何内容。但是,它可能适用于您的情况。
答案 1 :(得分:1)
CREATE TABLE Table1
(`Name` varchar(5), `Age` int)
;
INSERT INTO Table1
(`Name`, `Age`)
VALUES
('PVJ', 10),
('EPF', 12),
('CISCO', 13)
;
CREATE TABLE Table2
(`Name` varchar(3), `Age` int)
;
INSERT INTO Table2
(`Name`, `Age`)
VALUES
('PVJ', 10),
('EPF', 12),
('DVF', 13)
select Table1.Name,(select Table2.Age from Table2 where Table1.Name=Table2.Name) Age from table1
答案 2 :(得分:0)
从我目前对关系代数的理解来看,这是不可能的。 左外连接仅连接右表所存在的对应项。
你可以使用两个查询,一个是连接,一个是带&#34的选择;其中not_exists(从table2中选择1,其中table2.id = table1.id)" 然后你将这两组联合起来,这将导致你的外连接。