【问题标题】:How to do a JOIN without duplicates that don't match the condition?如何在没有不符合条件的重复项的情况下进行 JOIN?
【发布时间】:2021-12-27 08:35:40
【问题描述】:

我正在尝试加入 tags.url = urls.url,但问题出在我的查询中,我得到的标签在 urls 表中没有相同的 url。

这修复了它添加了一个 WHERE 子句,以确保两者中的 url 相同..但我不相信这是在 SQL 中执行 JOIN 的正确方法:

SELECT urls.*, tags.tag FROM urls LEFT JOIN tags ON urls.url = tags.url WHERE tags.tag = ? AND tags.url = urls.url ORDER BY created_at DESC LIMIT 50

我正在使用 sqlite。

如果我不使用AND tags.url = urls.url,那么我会得到与标签 where 子句匹配的标签,但 urls 在连接中不匹配。

【问题讨论】:

  • 如果您只想要表的匹配行,那么您应该进行内部联接。

标签: sql sqlite


【解决方案1】:

来自sqlite doc

如果连接运算符是“LEFT JOIN”或“LEFT OUTER JOIN”,则在应用 ON 或 USING 过滤子句后,将在原始左侧的每一行的输出中添加一个额外的行输入数据集对应于复合数据集中的任何行(如果有)。添加的行在通常包含从右侧输入数据集复制的值的列中包含 NULL 值。

返回所有tags 行。一个简单的 JOIN 将找到两个表的“交集”。

【讨论】:

  • 请提供代码
  • 从发布的 sql 中删除单词“LEFT”(和 AND 子句)。
猜你喜欢
  • 2020-12-29
  • 2013-05-04
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
相关资源
最近更新 更多