获得正确的连接

时间:2014-09-02 16:33:32

标签: sql-server join

我正在尝试获取所有已注册的帐户。

我有4张桌子。

tAuditTracking包含以下所有用户信息:

ID    Contract_ID        IP Address          LoginID      Activity    Step
1       376877          192.111.4.100        sam@gmail      1         Login
2       376878          192.111.4.100        Bob@gmail      2         Enroll
3       376879          192.111.4.100        Tom@gmail      3         LogOut


ActivityStatus
   1
   1
   2

第二个是tlkCustPortalStatus

StatusID   Portal Status
1              Pass
2              Fail

第三个表是tlkCustPortalActivities

ActivityID         Portal Activity
1                       Login
2                       Enroll
3                       Logout

最后一张表是tcontract

Contract_ID       Account Number
376877                34104253
376878                35104252
376879                31104257

这是我的代码。我知道它很可怕,但我正在帮助我的上司。所以请任何提示或帮助将不胜感激

ALTER PROC spCustPortalEnrolledAccounts


(@ENROLLED INT)


As
 Begin

SELECT A.ID, A.CONTRACT_ID, 'A.IP ADDRESS',A.DATE,A.LOGINID,A.ACTIVITY,A.STEP,A.ACTIVITYSTS,A.ADDITIONALDATA,B.ENROLL
FROM tAuditTracking A

JOIN tlkCustPortalActivities B ON B.ActivityID = A.Contract_id
WHERE B.ActivityID = 2

END
GO

EXEC spCustPortalEnrolledAccounts'2'

1 个答案:

答案 0 :(得分:0)

一些问题。 ram_sql指出你使用了一个参数甚至用一个值来执行过程,但在实际的存储过程中,这个值被硬编码为

WHERE B.ActivityID = 2

将其更改为

WHERE B.ActivityID = @ENROLLED

其次,更重要的是,我只能猜测运行程序要么没有行还是很少?根据您在表格中获得的值,以下内容的加入毫无意义。

FROM tAuditTracking A
JOIN tlkCustPortalActivities B ON B.ActivityID = A.Contract_id

您的A.Contract_ID值是6位数字值,但您的B.ActivityID值是单位数值。

虽然接下来的内容不太可能是你想要的,而且我基于你试图加入CONTRACT_ID的事实,这似乎与表tcontract有关系,但是信息不足从tAuditTrackng通过tcontract加入ContractID到tlkCustPortalActivities。但是,它似乎满足了您使用提供的参数值从tAuditTracking获取所有帐户的需求(在这种情况下,ENROLLED为2)

SELECT A.ID, A.CONTRACT_ID, 'A.IPADDRESS',A.DATE,A.LOGINID,A.ACTIVITY,
A.STEP,A.ACTIVITYSTS,A.ADDITIONALDATA,B.ENROLL
FROM tAuditTracking A
JOIN tlkCustPortalActivities B ON B.ActivityID = A.ActivityID
WHERE B.ActivityID = @ENROLLED