0

背景:

您好,第一次发布问题,所以请原谅任何不当行为...我在大学被分配了一个使用 ASP.NET 和 SQL Server 的作业,我们基本上要做的是创建一个网络表单,我们可以在其中选择一个政党绑定到 SQL 数据源的单选按钮列表。基于该选择,下拉列表随后填充有作为选择单选按钮列表的一方的一部分的国会议员的列表。然后,您可以选择一名议员并查看他或她的个人详细信息、他们在议会中的角色,并通过与各种 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_1通过ROLE_4参考ROLE.ROLE_NUM。)

问题:

我有一个DetailsView绑定到查询的 SQL 数据源的控件MP_ROLES。我基本上想要做的是将 , 等中的每个值替换ROLE_1为表中引用ROLE_2的相应值(如)。现在通过我对文本框的挖掘,我知道在更简单的应用程序中你可以做我想要用这个函数做的事情,但是由于我还在学习,我还没有完全整理好语法来做我想做的事情。ROLE_DESCRIPTIONROLE_NUMROLEMP_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_NUMINNER 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 年里,我一直在努力寻找解决方案,所以如果有人能够告诉我哪里出了问题,或者可能足够友善地提供解决方案,我将不胜感激:)

4

2 回答 2

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)
于 2013-10-27T06:08:10.807 回答
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)
于 2013-10-25T07:23:52.563 回答