我正在使用无法在其中创建函数或临时表的 PostgreSQL 9.6 只读副本。
在一个表中有一个应该在光盘上的文件列表。在一个完全不同的服务的目录中,有文件本身,以 file_id 命名。
Column | Type
-----------+-----------
file_id | integer
name | text
在另一台机器上的光盘上
ls -rt /var/www/dbfiles
519288 519290 519297 519298 519231 ...
大约有 5000 条记录和大约 5000 个文件,但我有理由相信它们不匹配。因此,我试图找到一种运行查询的方法,该查询将显示数据库中的哪些记录在磁盘上没有文件,以及磁盘上的哪些文件在数据库中没有记录。目前这是一次性的,所以我不介意对目录列表进行一定程度的修改。
如果我可以将目录列表导入到表中,我将只进行外部联接并在每一侧查找空值。有没有办法可以针对充满 ID 的子查询进行外部连接?有点像
SELECT f.name, dir_listing.id FROM files f
FULL OUTER JOIN (SELECT (519288, 519290, 519297, 519298, 519231...) AS id) AS dir_listing
输出的样子
name | id
---------------+---------
myfile.txt | 519288
otherfile.txt |
| 519290
(等)
让我远离 CSV 和 VLOOKUP!
最佳答案
您可以使用 VALUES()
:
SELECT f.name, dir_listing.id
FROM files f FULL OUTER JOIN
(VALUES (519288), (519290), (519297), (519298), (519231),
) AS dir_listing (id)
ON f.file_id = dir_listing.id;
关于sql - 查找磁盘上缺少文件的 PostgreSQL 记录,以及磁盘上缺少数据库记录的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54766089/