私の最初のネストされたSELECT
ステートメントを書いて、誰かが私を助けてくれることを願っています。
CompanyCode
テーブルからAgentId
とUniqueAgentIdtoUniqueAgentId
を取得する必要があります。ただし、必要なのは別のテーブルからのクエリに表示されるものだけです。行間の共通リンクはUniqueAgentId
列になります(基本的に、同じCompanyCode
を含む行からAgentId
とUniqueAgentId
を取得する必要がありますネストされたクエリで表示されます)。
このクエリを書き出すと、非常に役立つメッセージが表示されます
')'の近くの構文が正しくありません
クエリ:
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を比較しようとしたため、このエラーが発生しました。助けてくれてありがとう!
多くのデータベースにサブクエリがある場合は、エイリアスを指定する必要があります。
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
)
それは役立つはずです。
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
)
)
実際に報告された問題であるエイリアスを宣言する必要があり、複数の戻り値に対して=
演算子の代わりに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
)
サブクエリは複数の値を返す場合があります。 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
)
注このようにして、テーブルエイリアスのデカルト積を取得しますqおよびa。これがあなたの望むものかどうかはわかりません。多分結合はより良いはずです。