【问题标题】:How to use LEFT JOIN in this query如何在此查询中使用 LEFT JOIN
【发布时间】:2011-06-28 13:13:05
【问题描述】:

我有以下问题

SELECT
    interview_content.title `title`,
    gallery_images.img_path img
FROM
    `interview`,
    `interview_content`,
    `gallery`,
    `gallery_images`
WHERE
    `gallery_images`.`id_parrent` = `gallery`.`id`
AND
    `gallery`.`id` =  `interview`.`gallery_id`
AND
    `gallery_images`.`default` = '1'
AND
    `interview`.`id` = `interview_content`.`id_parrent`
AND
    interview_content.id_lang = '2'
ORDER BY
    interview.date DESC

我需要在 gallerygallery_images 表上使用 LEFT JOIN(即使没有图库或默认图像也能获得 interview.title

非常感谢

更新


问题在于第二个 LEFT JOIN。我无法让它们正确地协同工作。当我尝试时

SELECT
    interview_content.title `title`,
    gi.img_path img
FROM
    `interview`,
    `interview_content`
LEFT JOIN `gallery` as g ON g.`id` = `interview`.`gallery_id` 
LEFT JOIN `gallery_images` as gi ON gi.id_parrent = g.`id`
WHERE
    `interview`.`id` = `interview_content`.`id_parrent`
AND
    interview_content.id_lang = '2'
ORDER BY
    interview.date DESC

it returns //Unknown column 'interview.gallery_id' in 'on clause'

【问题讨论】:

  • 你能展示你的桌子吗?因为也许它不仅是您的查询,而且可以通过更改表来更轻松地完成
  • @Tricker 问题出在 ANSI 格式混合中。看我的回答

标签: php mysql left-join


【解决方案1】:

不要混合使用 ANSI-89 样式和 ANSI-92 样式连接。

我在 SO,here 中发现了同样的问题。

所以我的查询必须是这样的

SELECT
    ic.title `title`,
    gi.img_path img
FROM
    `interview` i
JOIN interview_content ic  on ic.id_parrent =  i.id AND ic.id_lang = '2'
LEFT JOIN `gallery` as g ON g.`id` = i.`gallery_id` 
LEFT JOIN `gallery_images` as gi ON gi.id_parrent = g.`id`
AND gi.`default` = '1'
WHERE
    i.`id` = ic.`id_parrent`
OPRDER BY
    `i`.`date` DESC

【讨论】:

    【解决方案2】:

    试试那个:

    SELECT
        interview_content.title `title`,
        gallery_images.img_path img
    FROM
        `interview`,
        `interview_content`,
    LEFT JOIN `gallery` ON (`interview`.`gallery_id` = `gallery`.`id` AND `gallery_images`.`default` = '1'), 
    LEFT JOIN `gallery_images` ON `gallery`.`id` = `gallery_images`.`id_parrent`
    WHERE
        `interview`.`id` = `interview_content`.`id_parrent`
    AND
        interview_content.id_lang = '2'
    ORDER BY
        interview.date DESC;
    

    【讨论】:

    • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 7 行的“LEFT JOIN gallery ON (interview.gallery_id = gallery.id AND `gallery_i' 附近使用正确的语法
    • 你必须在interview_content之后删除,
    【解决方案3】:

    你知道你需要做什么。 Google 是你的朋友吗?

    http://en.wikipedia.org/wiki/Join_%28SQL%29#Left_outer_join

    【讨论】:

    猜你喜欢
    • 2012-07-31
    • 2012-05-14
    • 2018-08-18
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2020-02-26
    • 2011-06-12
    相关资源
    最近更新 更多