【问题标题】:left join with specific conditions help please离开加入有特定条件的帮助请
【发布时间】:2011-11-21 12:09:25
【问题描述】:

在构建查询时遇到问题 这是简化的表格结构 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 )

对于同时具有图像和文件的事件,它仍然会返回 2 条记录,其中一个带有 file_path null 。

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

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

只有文件没有图片的事件将不再返回

请问有解决办法吗?

提前致谢

【问题讨论】:

  • 在 Stack Overflow 上,您的问题并不局限于严格的字符限制,因此请使用正确的语法和标点符号,以便其他人更容易理解您的问题。
  • 用内连接代替左连接
  • 我通常在发布我的问题时尽量做到准确,但我有局限性,因为英语不是我的母语,但感谢您的指点

标签: mysql sql join left-join


【解决方案1】:
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的左连接没有任何影响。

【讨论】:

    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2011-01-27
    • 1970-01-01
    相关资源
    最近更新 更多