-1

私は次のコードを持っています -

declare @userType int
declare @custIdOfUser int

select 
    @userType = UserTypeId, @custIdOfUser = CustomerId 
from 
    customers c with (nolock)
left outer join 
    Sites s with (nolock) on c.CustomerId = s.CustomerId 
left outer join 
    customers rc on rc.CustomerId = c.ResellerId 
where 
    c.[name] is not null 
    and (c.customerId is null or rc.CustomerId = c.CustomerId) 
    and c.IsActive != ''
    and (@userType = 1 OR @userType = 2 OR 
           (c.customerId in ((SELECT u.CustomerId, ur.RoleId 
                              FROM Users u
                              INNER JOIN UserRoles ur ON ur.UserId = u.UserId AND ur.RoleId = 39
                              INNER JOIN Customers c ON ur.CustomerId = c.CustomerID 
                              WHERE u.UserId = 28 or u.UserTypeId = 3 or u.UserTypeId = 4 
                                and c.customerId in 
                                    (SELECT c.CustomerId FROM Customers c 
                                     WHERE c.resellerId = u.CustomerId )))))

次のエラーメッセージが表示されます-

メッセージ 116、レベル 16、状態 1、行 10
サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです。
メッセージ 207、レベル 16、状態 1、行 3
列名 'UserTypeId' が無効です。
メッセージ 209、レベル 16、状態 1、行 3
あいまいな列名 'CustomerId'。

4

1 に答える 1

2
  1. あいまいな列名 'CustomerId'

    CustomerIdどのテーブルから取得するかを指定せずに選択しているため、これを取得しています。この列名は 3 つのテーブル ( UserRolesSitesおよびCustomers) に存在し、そのうちの 1 つに 2 回 (Customers cおよびCustomers rc) 結合しています。selectステートメントをより明示的にする必要があります。

    select 
      @custIdOfUser = c.CustomerId
    
  2. 無効な列名 'UserTypeId'

    この列はどのテーブルにも存在しません。

  3. サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです。

    – あなたはこれを持っているので:

    c.customerId in ((SELECT u.CustomerId, ur.RoleId 
    

    これは次のとおりです。

    c.customerId in ((SELECT u.CustomerId
    
于 2013-11-08T17:16:35.310 に答える