Mysql 左图请加入具体条件帮助

Mysql 左图请加入具体条件帮助,mysql,sql,join,left-join,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] 我们主要有两种文件类型 图像=2 文件=4 我想做的是把这些事件和它们的图像放在一起(如果它们有图像的话) 我正在尝试使用此查询执行此操作 select e.id, e.name,uf.id as

我在构造查询时遇到问题 下面是简化的表格结构 3张桌子

Event [Event_id , Event_name]

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

Uploaded_Files[File_id , File_type, File_path]
我们主要有两种文件类型

  • 图像=2

  • 文件=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 )
它仍然会为同时具有image和file的事件返回2条记录,其中一条记录的file_path为null

另一方面,如果我执行以下操作:

where (uf.id is null OR (uf.id is not null AND uf.type=2))
仅包含文件且不包含图像的事件将不再返回

请问有解决办法吗

提前谢谢

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
这应该可以(未经测试)
获取空记录的原因是,您只在上载的文件表上指定uf.type条件,这不会对事件文件的左连接施加任何影响。

在堆栈溢出时,您的问题不受严格的字符限制,因此,请使用正确的语法和标点符号,以便其他人能更容易地理解你的问题。用内部连接代替左连接我通常在发布问题时尽量准确,但我有局限性,因为英语不是我的母语。谢谢你的指点