编写我的第一个嵌套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)
)
EDIT 非常感谢您的回复。使用下面的每个单独的查询,但我不断收到相同的错误消息:无效的对象名称'UniqueAgentIdToUniqueAgentId'。这对我来说很奇怪,因为这是SQL Management Studio可以看到的数据库上的实际表。
第二次编辑 结果只是一个拼写错误。新错误是“varchar值'3030111101'的转换溢出了一个int列。”不太清楚这意味着什么......
最终编辑 我试图将char与它进行比较,这导致了这个错误。再次感谢您的帮助!
答案 0 :(得分: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
)
但是,您的内部查询可能会返回多个值,并且您不需要两个嵌套查询:
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
)
这应该有所帮助。
答案 1 :(得分: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
)
)
答案 2 :(得分: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
)
答案 3 :(得分:0)
您的子查询可能返回超过1个值。你必须使用IN。
您也可以避免使用两个子查询,只使用一个。
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 的笛卡儿积。 我不知道这是不是你想要的;也许连接应该更好。