4

私の最初のネストされたSELECTステートメントを書いて、誰かが私を助けてくれることを願っています。

テーブルからCompanyCodeとを取得する必要があります。ただし、必要なのは別のテーブルからのクエリに表示されるものだけです。行間の共通リンクは列になります(基本的に、ネストされたクエリで表示されるものと同じものを含む行からとを取得する必要があります)。AgentIdUniqueAgentIdtoUniqueAgentIdUniqueAgentIdCompanyCodeAgentIdUniqueAgentId

このクエリを書き出すと、非常に役立つメッセージが表示されます

')'の近くの構文が正しくありません

クエリ:

SELECT 
    CompanyCode, AgentId
FROM 
    UniqueAgentIdToUniqueAgentId un
WHERE 
    un.UniqueAgentId = 
       (SELECT UniqueAgentId 
        FROM 
            (SELECT q.LastChangeDate, a.UniqueAgentId 
             FROM QueueUpdates q, AgentProductTraining a 
             WHERE a.LastChangeDate >= q.LastChangeDate)
       )

編集ご回答ありがとうございます。以下のすべてのクエリを使用すると、同じエラーメッセージが表示され続けます:無効なオブジェクト名'UniqueAgentIdToUniqueAgentId'。これは、SQL Management Studioが認識できるデータベース上の実際のテーブルであるため、私には奇妙です。

2番目の編集これは単にスペルミスであることが判明しました。新しいエラーは、「varchar値「3030111101」の変換がint列をオーバーフローしました」です。これが何を意味するのかよくわかりません...

最終編集charとitを比較しようとしたため、このエラーが発生しました。助けてくれてありがとう!

4

4 に答える 4

3

多くのデータベースにサブクエリがある場合は、エイリアスを指定する必要があります。

SELECT CompanyCode, AgentId
FROM UniqueAgentIdToUniqueAgentId un
WHERE un.UniqueAgentId = 
      (SELECT UniqueAgentId 
       FROM (SELECT q.LastChangeDate, a.UniqueAgentId 
             FROM QueueUpdates q, AgentProductTraining a 
             WHERE a.LastChangeDate >= q.LastChangeDate
            ) t
      )

ただし、内部クエリは複数の値を返す可能性があり、2つのネストされたクエリは必要ありません。

SELECT CompanyCode, AgentId
FROM UniqueAgentIdToUniqueAgentId un
WHERE un.UniqueAgentId in
      (SELECT UniqueAgentId 
       FROM QueueUpdates q, AgentProductTraining a 
       WHERE a.LastChangeDate >= q.LastChangeDate
      )

また、この場合はJOIN構文を使用する方が適切です。

SELECT CompanyCode, AgentId
FROM UniqueAgentIdToUniqueAgentId un
WHERE un.UniqueAgentId in
      (SELECT UniqueAgentId 
       FROM QueueUpdates q join
            AgentProductTraining a 
            on a.LastChangeDate >= q.LastChangeDate
      )

それは役立つはずです。

于 2012-08-08T16:15:10.997 に答える
0
SELECT CompanyCode, AgentId
    FROM UniqueAgentIdToUniqueAgentId un
    WHERE un.UniqueAgentId = 
    (
        SELECT UniqueAgentId 
         FROM AgentProductTraining  where UniqueAgentId IN
           (
            SELECT q.LastChangeDate, a.UniqueAgentId 
            FROM QueueUpdates q, AgentProductTraining a 
            WHERE a.LastChangeDate >= q.LastChangeDate
            )
    )
于 2012-08-08T16:11:44.603 に答える
0

実際に報告された問題であるエイリアスを宣言する必要があり、複数のリターンに対して演算子のIN代わりに句を使用する可能性があります。=

SELECT CompanyCode
    ,AgentId
FROM UniqueAgentIdToUniqueAgentId un
WHERE un.UniqueAgentId in (
        SELECT UniqueAgentId
        FROM (
            SELECT q.LastChangeDate
                ,a.UniqueAgentId
            FROM QueueUpdates q
                ,AgentProductTraining a
            WHERE a.LastChangeDate >= q.LastChangeDate
            ) a 
        )
于 2012-08-08T16:12:05.210 に答える
0

サブクエリは複数の値を返す場合があります。INを使用する必要があります。
2つのサブクエリを回避し、1つだけを使用することもできます。

SELECT CompanyCode, AgentId
FROM UniqueAgentIdToUniqueAgentId un
WHERE un.UniqueAgentId IN 
(
    SELECT a.UniqueAgentId 
    FROM QueueUpdates q, AgentProductTraining a 
    WHERE a.LastChangeDate >= q.LastChangeDate
)

このようにして、テーブルエイリアスqaのデカルト積を取得することに注意してください。これがあなたの望むものかどうかはわかりません。多分参加はより良いはずです。

于 2012-08-08T16:15:04.817 に答える