SELECT with LEFT JOIN返回NULL值

时间:2016-03-26 21:27:19

标签: php mysql join left-join

我有两张桌子:

帖子

id | id_author | content | year
1  | 1         | hello   | 2015
2  | 1         | world   | 2016
3  | 2         | hi      | 2016

收藏夹

id | id_author | id_post | year
1  | 3         | 2       | 2016

我想SELECT使用posts通过favorites获取LEFT JOIN数据。所以我做了: ( 考虑到我使用id_author = 3)

的用户登录
SELECT p.id, p.id_author, p.content, p.year, f.id_post
FROM favorites f
LEFT JOIN posts p
ON f.id_post = p.id
WHERE f.id_author = 3
ORDER BY f.id
DESC

所以,我做了:($sql等于上面的查询)

if(count($sql) > 0) {
    var_dump($sql);
}

但输出是:

array(1) {
  [0]=>
  array(5) {
    ["id"]=>
    NULL
    ["id_author"]=>
    NULL
    ["content"]=>
    NULL
    ["year"]=>
    NULL
    ["id_post"]=>
    string(1) "2"
  }
}

为什么要返回NULL

1 个答案:

答案 0 :(得分:2)

鉴于OP的模式和数据,以下查询在语法上无效:

SELECT p.id, p.id_author, p.content, p.year, f.id_post
FROM favorites f
LEFT JOIN posts p
  ON f.id_post = p.id
WHERE id_author = 3
ORDER BY f.id DESC

因为WHERE子句的谓词所使用的字段存在歧义:id_author = 3

您很可能拥有p.id_author = 3,这意味着LEFT JOIN子句使用WHERE操作的 right 表的字段。这会将LEFT JOIN转换为INNER JOIN操作,不会产生任何结果。所以,你可能不得不使用:

WHERE f.id_author = 3