SQL INNER JOIN with LIKE和WHERE

时间:2015-01-14 21:31:57

标签: mysql inner-join where sql-like

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

我想显示DocumentStatistics中的数据以及Documents表中的正确单元格。 有人能帮我吗?这就是我到目前为止所做的:

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

也许你可以用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