【问题标题】:SQL INNER JOIN with LIKE and a WHERESQL INNER JOIN 与 LIKE 和 WHERE
【发布时间】:2015-01-14 21:31:56
【问题描述】:

我有 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

【问题讨论】:

  • 我建议使用主键和外键。

标签: mysql inner-join where sql-like


【解决方案1】:

like 很好。你只需要正确调用它:

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

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

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

【讨论】:

  • CONCAT 是我以前没有遇到过的。感谢您在我的工具箱中添加内容。
【解决方案2】:

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

【讨论】:

  • 我对这个网站很陌生。我如何接受你的答案?
  • 我的答案左侧有一个按钮。我真的不能说:)
猜你喜欢
  • 2012-06-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
  • 2016-04-28
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多