SQL 使用 LIKE 和 WHERE 进行内部联接

SQL INNER JOIN with LIKE and a WHERE

我有 2 个 table。一种称为 DocumentStatistics,一种称为 Documents。 DocumentStatistics 有一个名为 filename 的字段,其中包含一个文件名,例如 abcdef。另一方面,Documents 具有类似的命名方案,但因为它也包含旧文件,所以它们被编号(例如它可能有 abcdef1 和 abcdef2)。只有最新的文档才会被标记为 islive=-1.

我想显示来自 DocumentStatistics 的数据以及来自文档 table 的正确单元格。 有人能帮我吗?这是我目前所拥有的:

SELECT DocumentStatistics.*,Documents.tmpname
FROM DocumentStatistics
INNER JOIN Documents
ON DocumentStatistics.filename LIKE 'Documents.filename%'
WHERE Documents.islive=-1

也许您可以使用 SUBSTRING 来完成。像这样:

SELECT DocumentStatistics.*,Documents.tmpname
FROM DocumentStatistics
LEFT JOIN Documents
ON SUBSTRING(DocumentStatistics.filename,start,length)= SUBSTRING(Documents.filename,start,length)
WHERE Documents.islive=-1

like 没问题。你只需要正确调用它:

SELECT ds.*, d.tmpname
FROM DocumentStatistics ds INNER JOIN
     Documents d
     ON ds.filename LIKE CONCAT(d.filename, '%')
WHERE d.islive = -1;

您的版本使用常量字符串而不是列名称调用它。

我在查询中添加了 table 个别名。它们使查询更易于编写和阅读。