-2

CharUser次のデータを持つテーブルがあります

UserID UserName UserPhone UserAddress

と呼ばれるテーブルもsubscriptionjob

subID userId   companyid

user という別のテーブルUsersCvsには、次のデータがあります

CVId   Companyuserid   cvpath

行ごとに次の結果になるクエリを実行したい

userid   username   userphone  useraddress usercv

ユーザーIDはsubcriptionjob、最初のクエリで次のことを試したテーブルから与えられます

SELECT        CharUserId, CharUserName, CharUserPassword, CharUserMail, CharUserPhone, CharUserAddress, CharUserGender, ProgId, CharUserBirthdate
FROM            CharUser
WHERE        (CharUserId IN
                             (SELECT        CompanyUserId
                                FROM            SubsciptionJob
                                WHERE        (JobId = 1)))

これは2番目のクエリです

SELECT        TOP (1) CvPath
FROM            UsersCvs
WHERE        (CompanyUserId IN
                             (SELECT        CompanyUserId
                                FROM            SubsciptionJob AS SubsciptionJob_1
                                WHERE        (JobId = 1)))
ORDER BY CvId DESC

両方とも単独で問題なく機能します。結合を間に入れて結合しようとしましたが、機能しません

各行に一意の値を持つ最初のクエリに cvpath 列をアタッチしたい

何か案は.. ?

ありがとうございました

4

3 に答える 3

0

使用するROW_NUMBER()

SELECT CharUserId, CharUserName, CharUserPassword, CharUserMail, 
    CharUserPhone, CharUserAddress, 
    CharUserGender, ProgId, CharUserBirthdate,cvpath
FROM CharUser CU
JOIN subscriptionjob SJ ON SJ.UserId = CU.UserID
INNER JOIN 
(   SELECT cvpath,Companyuserid,
    ROW_NUMBER() OVER (PARTITION BY A.Companyuserid ORDER BY A.CVID DESC) X
    FROM UsersCvs A
)R ON R.X = 1 AND CU.UserID = R.Companyuserid
WHERE JobId = 1
于 2012-06-15T23:19:57.213 に答える
0

これは上記の回答よりも効率的です。

SELECT CharUserId, 
       CharUserName, 
       CharUserPassword, 
       CharUserMail, 
       CharUserPhone, 
       CharUserAddress, 
       CharUserGender, 
       ProgId, 
       CharUserBirthdate,
       (SELECT TOP (1) CvPath FROM UsersCvs c where c.CompanyUserID=X.CharUserID
       FROM CharUser X
       WHERE (CharUserId IN 
                           (SELECT CompanyUserId FROM SubsciptionJob 
                            WHERE (JobId = 1)))

サブスクリプション テーブルと CharUser テーブルの間で内部結合を使用すると、さらに効率的になります。

于 2012-05-19T09:58:02.557 に答える
0

これを行う1つの方法:

SELECT CharUserId
     , CharUserName
     , CharUserPassword
     , CharUserMail
     , CharUserPhone
     , CharUserAddress
     , CharUserGender
     , ProgId
     , CharUserBirthdate
     , (SELECT TOP (1) CvPath
       FROM UsersCvs
       WHERE CompanyUserId IN (SELECT CompanyUserId
                               FROM SubsciptionJob
                               WHERE JobId = 1)
       ORDER BY CvId DESC) AS CvPath    
FROM CharUser
WHERE CharUserId IN (SELECT CompanyUserId
                     FROM  SubsciptionJob
                     WHERE JobId = 1)
于 2012-05-19T09:40:01.013 に答える