有特定条件的左连接请帮助

时间:2011-11-21 12:09:25

标签: mysql sql join left-join

在构建查询时遇到问题 这里是简化的表格结构 3桌

Event [Event_id , Event_name]

Event_files [Event_id(FK) , File_id(FK)]

Uploaded_Files[File_id , File_type, File_path]

我们主要有两种文件类型

  • image = 2

  • document = 4

我想要做的是将事件及其图像(如果他们有图像) 我试图用这个查询

这样做
select e.id, e.name,uf.id as file_id,uf.path  
from event e
left join event_file ef on ef.event_id = e.id
left join uploaded_file uf ON ef.file_id = uf.id

我知道我需要应用一个条件但是每次我在where或ON时都会出现查询问题 例如,如果我申请:

left join uploaded_file uf ON ef.file_id = uf.id AND (uf.type = 2 )

对于同时包含图像和文件的事件,它仍然会返回2条记录,其中file_path为null。

另一方面,如果我做以下事情:

where (uf.id is null OR (uf.id is not null AND uf.type=2))

仅包含文件且没有图像的事件将不再返回

请问有解决方案吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

SELECT e.id, e.name, f.file_id AS file_id, f.path
FROM event e
LEFT JOIN
(
    SELECT ef.event_id, uf.id AS file_id, uf.path
    FROM event_file ef
    INNER JOIN uploaded_file uf ON ef.file_id = uf.id AND uf.type = 2
) f ON f.event_id = e.id

这应该做(未经测试。) 获取空记录的原因是因为您只在upload_file表上指定了uf.type条件,这对于event_file的左连接没有任何规定。