首页 > 解决方案 > 为什么 SQL 中外连接的结果包含 null 列,而原始表没有?

问题描述

我一直在玩 Firefox 使用的places.sqlite数据库来存储书签等。它的结构如图所示

我想执行这个查询:

SELECT b.title, p.url 
FROM moz_bookmarks AS b 
LEFT OUTER JOIN moz_places AS p using(guid) 
WHERE dateAdded > 1502724919884000 
ORDER BY dateAdded 
   AND p.url like '%youtube%' 
   AND p.url NOT LIKE '%list%';

我确实得到了很多结果,但不幸的是,整个 'url' 列都充满了 NULL。现在当我做

SELECT url FROM moz_places;

网址显示正确。我认为我错过了一些关于连接功能的东西,但直到现在我还不能完全弄清楚。

到目前为止我已经尝试过:

现在我不知道如何解决这个问题,有人可以帮我解决这个问题吗?将不胜感激:)

标签: sqlsqlite

解决方案


您正在加入guid列上的表格,而您链接的文档指出:

fk列提供了moz_places中对应记录的id号

所以你的加入条件应该是moz_bookmarks.fk = moz_places.id

SELECT b.title, p.url FROM moz_bookmarks AS b 
LEFT OUTER JOIN moz_places AS p ON b.fk = p.id
ORDER BY dateAdded 
AND p.url like '%youtube%' 
AND p.url NOT LIKE '%list%';

推荐阅读