mysql - 离开加入具体条件请帮助

标签 mysql sql join left-join

构建查询时遇到问题 这是简化的表格结构 3张 table

Event [Event_id , Event_name]

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

Uploaded_Files[File_id , File_type, File_path]

我们主要有2种文件类型

  • 图片=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 )

对于同时具有图像和文件的事件,它仍会返回 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

这应该可以(未经测试。) 您得到空记录的原因是因为您只在 uploaded_file 表上指定了 uf.type 条件,这对 event_file 的左连接没有任何影响。

关于mysql - 离开加入具体条件请帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8211560/

相关文章:

mysql - sql查询计算百分比

c# - SQLParameter 无法正常工作

sql - Rails 清理事件记录查询中的用户输入

sql - 创建连接别名 - 怎么做?

php - 我正在尝试自动增加发票号码

MySQL从一张表中查询 - 选择同一字段两次

mysql - SQL 查询仅从另一个表中选择具有一组独占相关实体的结果

php - 在 PHP 中加入分解

mysql - sql查询错误1060重复列错误 'nome'

javascript - 使用 JSON 和 AJAX 从数据库中提取信息