例如:
SELECT DISTINCT table1
.id FROM table1
LEFT OUTER JOIN table2
ON table2
.table1_id
= table1
.id
LEFT OUTER JOIN table3
ON table3
.table2_id
= table2
.id
WHERE table1
.id
= 1 AND (table3.name='name')
如果table2是空的,或者table3是空的,即使table1有id
= 1那条记录,由于后面的条件(table3.name='name')不成立,那么返回结果是空,我想要的结果是如果table2是空的或者table3是空的,也要返回table1的记录,这样的语句该怎么写?
这种要用外连接来实现,其实你已经写出来了,只是你的where筛选条件要写到left outer join那里面去,因为你的and table3.name='name'会让前面的外连接失效:
[code="sql"]
SELECT DISTINCT table1.id
FROM table1
LEFT OUTER JOIN table2
ON table2.table1_id = table1.id
LEFT OUTER JOIN table3
ON table3.table2_id = table2.id
AND table3.name = 'name'
WHERE table1.id = 1
[/code]