2013-02-01 79 views
0

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

我有2个表:

http://pastebin.com/q5yws5Ym(不知道如何执行造型)

,我想产生类似 http://pastebin.com/GscBUrYS

(同时也有更多的参数,我很感兴趣在我将如何做这样的事情)

虽然我能达到类似的效果与自连接和equi连接,它会产生大量不需要的ro WS,我不知道如何自动删除。

+0

每个用户的参数数量是固定的还是可能是一个用户有两个参数,一个是四个等? –

+0

所有用户的参数数量都是相同的。 (固定的) –

回答

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 

它可能会,你将需要更多的“除外”条款的地方,以确保每行只选择一次,但总的思路应该工作(对于给定和有限数量的不同user_param)。

+0

因此给出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 user.user_id = j1.user_id JOIN users_info J2上user.user_id = j2.user_id JOIN users_info J3上user.user_id = j3.user_id 其中j1.user_param!= j2.user_param和j1.user_param != j3.user_param和j2.user_param!= j3.user_param GROUP BY user.user_id' –

+0

是的,类似的东西。我手头没有数据库服务器,但我也认为这取决于实际的服务器。 –

+0

谢谢,我会研究它。 (试图找到更抽象的/关系代数的解决方案) –