【问题标题】:Non standard join非标准连接
【发布时间】:2013-02-01 14:04:34
【问题描述】:

我遇到了一个问题,并试图找到一个通用的解决方案作为连接。

我有 2 张桌子:

http://pastebin.com/q5yws5Ym(不确定如何强制设置样式)

我想生成类似的东西 http://pastebin.com/GscBUrYS

(虽然还有更多参数,但我对如何为这样的事情做这件事很感兴趣)

虽然我能够通过自连接和等连接达到类似的效果,但它会生成很多不需要的行,我不确定如何自动删除。

【问题讨论】:

  • 每个用户的参数数量是固定的还是可能是一个用户有两个参数,一个四个,等等?
  • 所有用户的参数数量相同。 (固定)

标签: database join relational-algebra


【解决方案1】:

尝试以下方式:

SELECT user.user_id, j1.user_param, j1.user_value, j2.user_param, j2.user_value
FROM user
JOIN Users_info j1 ON user.user_id = j1.user_id
JOIN users_info j2 on user.user_id = j2.user_id
where j1.user_param != j2.user_param
GROUP BY user.user_id

您可能需要更多的“排除”子句用于 where 以确保每行只选择一次,但总体思路应该有效(对于给定且数量有限的不同 user_param )。

【讨论】:

  • 所以给定 3 个参数,它会类似于 SELECT user.user_id, j1.user_param, j1.user_value, j2.user_param, j2.user_value , j3.user_param, j3.user_value FROM user JOIN Users_info j1 ON user.user_id = j1.user_id JOIN users_info j2 on user.user_id = j2.user_id JOIN users_info j3 on user.user_id = j3.user_id where j1.user_param != j2.user_param and j1.user_param != j3.user_param and j2.user_param != j3.user_param GROUP BY user.user_id
  • 是的,类似的。我手头没有数据库服务器,但我也认为这将取决于实际的服务器。
  • 谢谢,我会调查的。 (试图找到一个更抽象/关系代数的解决方案)
猜你喜欢
  • 2023-03-27
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多