表中的多列SQL连接

时间:2013-10-25 03:25:27

标签: asp.net sql join inner-join

背景:

您好,第一次发帖提问,请原谅任何不当行为...... 我在大学使用ASP.NET和SQL Server进行了一项任务,我们基本上要做的是创建一个webform,我们可以通过绑定到SQL数据源的单选按钮列表选择一个政党。基于该选择,然后在下拉列表中填充MP列表,这些MP是选择了单选按钮列表的一方的一部分。然后,您可以选择一名议员并查看他或她的个人详细信息,他们在议会中的角色,并通过链接到各种SQL数据源的多个数据控件来查询/查看问题。

我正在取得良好的进展,并试图利用我能找到的任何资源来获得解决方案,但是在选择国会议员后,我已经看到议会角色了。

这里有3个表:

MP                   MP_ROLES               ROLE
-------------        ---------------        ----------------
MP_NUM (PK)          MP_NUM (PK, FK)        ROLE_NUM (PK)
MP_FIRST             ROLE_1 (FK)            ROLE_DESCRIPTION
MP_LAST              ROLE_2 (FK)
MP_EMAIL             ROLE_3 (FK)
MP_CONTACTADD        ROLE_4 (FK)
MP_PHOTO
PARTY_NUM(FK)

(其中ROLE_1ROLE_4引用ROLE.ROLE_NUM。)

问题:

我有一个DetailsView控件绑定到查询MP_ROLES的SQL数据源。我基本上要做的是将ROLE_1ROLE_2等中的每个值替换为ROLE_DESCRIPTIONROLE_NUM引用的相应ROLE值表格(MP_ROLE.ROLE_1 = ROLE.ROLE_NUM AND MP_ROLE.ROLE_2 = ROLE.ROLE_NUM AND MP_ROLE.ROLE_3 = ROLE.ROLE_NUM AND MP_ROLE.ROLE_4 = ROLE.ROLE_NUM)。现在通过我在文本框中挖掘我知道在更简单的应用程序中你可以做我正在尝试用INNER JOIN函数做的事情,但是因为我还在学习我还没有完全按照语法排序做什么我想做。

到目前为止我所拥有的:

SELECT MP_ROLES.MP_NUM, MP_ROLES.ROLE_1, MP_ROLES.ROLE_2, MP_ROLES.ROLE_3, MP_ROLES.ROLE_4
FROM MP_ROLES 
INNER JOIN ROLE ON MP_ROLES.ROLE_1 = ROLE.ROLE_NUM 
INNER JOIN ROLE AS ROLE_3 ON MP_ROLES.ROLE_2 = ROLE.ROLE_NUM 
INNER JOIN ROLE AS ROLE_2 ON MP_ROLES.ROLE_3 = ROLE.ROLE_NUM 
INNER JOIN ROLE AS ROLE_1 ON MP_ROLES.ROLE_4 = ROLE.ROLE_NUM 
WHERE (MP_ROLES.MP_NUM = @MP_NUM)

在过去的8年里,我一直在努力寻找解决方案,所以如果有人能够告诉我哪里出错或者可能会提供解决方案,那将非常感激:)

2 个答案:

答案 0 :(得分:0)

你的问题在于= ROLE.ROLE_NUM。您还必须在此处指定别名。我也重新安排了一些数字,因为你的数字都混淆了。

SELECT MP_ROLES.MP_NUM
, MP_ROLES.ROLE_1
, MP_ROLES.ROLE_2
, MP_ROLES.ROLE_3
, MP_ROLES.ROLE_4 

FROM MP_ROLES

INNER JOIN ROLE AS ROLE_1 ON MP_ROLES.ROLE_1 = ROLE_1.ROLE_NUM
INNER JOIN ROLE AS ROLE_2 ON MP_ROLES.ROLE_2 = ROLE_2.ROLE_NUM
INNER JOIN ROLE AS ROLE_3 ON MP_ROLES.ROLE_3 = ROLE_3.ROLE_NUM
INNER JOIN ROLE AS ROLE_4 ON MP_ROLES.ROLE_4 = ROLE_4.ROLE_NUM

WHERE (MP_ROLES.MP_NUM = @MP_NUM)

答案 1 :(得分:0)

看起来我实际上的目标是使用LEFT OUTER JOIN函数完成:

SELECT 
MP_ROLES.MP_NUM, 
MP_ROLES.ROLE_1, 
MP_ROLES.ROLE_2, 
MP_ROLES.ROLE_3, 
MP_ROLES.ROLE_4, 
ROLE1.ROLE_NUM, ROLE1.ROLE_DESCRIPTION AS POSITION1, 
ROLE2.ROLE_NUM, ROLE2.ROLE_DESCRIPTION AS POSITION2, 
ROLE3.ROLE_NUM, ROLE3.ROLE_DESCRIPTION AS POSITION3, 
ROLE4.ROLE_NUM, ROLE4.ROLE_DESCRIPTION AS POSITION4 

FROM MP_ROLES 
LEFT OUTER JOIN ROLE AS ROLE1 ON MP_ROLES.ROLE_1 = ROLE1.ROLE_NUM 
LEFT OUTER JOIN ROLE AS ROLE2 ON MP_ROLES.ROLE_2 = ROLE1.ROLE_NUM 
LEFT OUTER JOIN ROLE AS ROLE3 ON MP_ROLES.ROLE_3 = ROLE1.ROLE_NUM 
LEFT OUTER JOIN ROLE AS ROLE4 ON MP_ROLES.ROLE_4 = ROLE1.ROLE_NUM 

WHERE (MP_ROLES.MP_NUM = @MP_NUM)