使用sql中的where子句创建左连接条件

时间:2014-09-30 11:49:29

标签: mysql sql left-join

我想在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子句本身。

3 个答案:

答案 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

http://sqlfiddle.com/#!2/7dbd4/17

答案 2 :(得分:0)

从我目前对关系代数的理解来看,这是不可能的。 左外连接仅连接右表所存在的对应项。

你可以使用两个查询,一个是连接,一个是带&#34的选择;其中not_exists(从table2中选择1,其中table2.id = table1.id)" 然后你将这两组联合起来,这将导致你的外连接。