【问题标题】:Combining join results with an at least function将连接结果与至少函数相结合
【发布时间】:2015-12-03 10:12:14
【问题描述】:

我是 SQL 新手,并且已经成功地掌握了基本功能,但是我现在正试图从内部连接的结果中找到至少有两个标记的人:

SELECT
    users.[First Name],
    users.[Last Name],
    IssuedTokens.UserID,
    IssuedTokens.TokenID,
    Tokens.TokenType
FROM IssuedTokens
INNER JOIN users ON users.ID = IssuedTokens.UserID
INNER JOIN Tokens ON Tokens.number = IssuedTokens.TokenID
GROUP BY IssuedTokens.UserID
HAVING COUNT(*) >= 2
ORDER BY IssuedTokens.UserID

这给出了错误:

列“Users.First Name”在选择列表中无效,因为它是 不包含在聚合函数或 GROUP BY 子句中。

我很喜欢在预先存在的表上使用函数,但还没有看到如何操作连接的结果。如果有人可以提供帮助,将不胜感激。

【问题讨论】:

  • 这不是 group by 的工作方式。你读过 group by 的聚合吗?
  • 您使用的是 MySQL 还是 SQL Server? (当涉及到 GROUP BY...时,其中一种产品可能有点“不同”)
  • @Drew 我实际上并没有打算把那个位留在那里,这是组合一个处理连接的函数和另一个处理计数的函数的结果。虽然我想多读一点不会有什么坏处
  • @jarlh 我正在使用 MySQl
  • 可以发送表创建查询吗?

标签: mysql sql join


【解决方案1】:

您可以在join 之前进行单独的聚合,以获取具有多个令牌的用户。然后,查询的其余部分不需要聚合:

SELECT u.[First Name], u.[Last Name], u.UserID, it.TokenID, t.TokenType
FROM IssuedTokens it INNER JOIN
     users u
     ON u.ID = it.UserID INNER JOIN
     Tokens t
     ON t.number = it.TokenID INNER JOIN
     (SELECT it.UserId
      FROM IssuedTokens it
      GROUP BY it.UserId
      HAVING COUNT(*) >= 2
     ) itu
     ON itu.UserId = it.UserId
ORDER BY it.UserID;

【讨论】:

  • 感谢您的回复,我已经尝试编译并收到错误:无法绑定多部分标识符“it.UserId”。
猜你喜欢
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2021-11-07
  • 2016-12-19
  • 1970-01-01
相关资源
最近更新 更多