SQL:加入语法错误
Posted
技术标签:
【中文标题】SQL:加入语法错误【英文标题】:SQL: JOIN syntax error 【发布时间】:2013-10-19 23:28:37 【问题描述】:我正在尝试消除不需要的重复查询结果。要点是字段 [CUSIP] 存在于所有相关表中,但是字段 [4DTYR] 存在于除 [IDX_FS] 之外的所有表中。
我之前只通过 [CUSIP] 字段加入表,这导致查询产生了不需要的重复结果(包含该字段的所有表中 [4DTYR] 的某种排列)。
然后,我做了下面的修改。但是,现在我收到一个 JOIN 语法错误。任何人都可以帮忙吗?谢谢!
FROM
(((IDX_FS LEFT JOIN DATA_BS
ON IDX_FS.CUSIP = DATA_BS.CUSIP)
LEFT JOIN DATA_Footnotes
ON IDX_FS.CUSIP = DATA_Footnotes.CUSIP)
LEFT JOIN DATA_IS
ON IDX_FS.CUSIP = DATA_IS.CUSIP)
LEFT JOIN DATA_SP
ON IDX_FS.CUSIP = DATA_SP.CUSIP
AND (((DATA_BS LEFT JOIN DATA_IS
ON DATA_BS.CUSIP = DATA_IS.CUSIP
AND DATA_BS.4DTYR = DATA_IS.4DTYR)
LEFT JOIN DATA_SP
ON DATA_BS.CUSIP = DATA_SP.CUSIP
AND DATA_BS.4DTYR = DATA_SP.4DTYR)
LEFT JOIN DATA_Footnotes.4DTYR
ON DATA_BS.CUSIP = DATA_Footnotes.CUSIP
AND DATA_BS.4DTYR = DATA_Footnotes.4DTYR
【问题讨论】:
请格式化您的代码? 您好,我已尽我所能重新格式化。我对此真的很陌生! 你为什么一次又一次地转发你的问题? 您已经发布了this,随后又发布了this。请参阅this 了解更多信息。 【参考方案1】:您的(
似乎太多了:
FROM
(
(
(IDX_FS LEFT JOIN DATA_BS ON IDX_FS.CUSIP = DATA_BS.CUSIP)
LEFT JOIN DATA_Footnotes ON IDX_FS.CUSIP = DATA_Footnotes.CUSIP
)
LEFT JOIN DATA_IS ON IDX_FS.CUSIP = DATA_IS.CUSIP
)
LEFT JOIN DATA_SP ON IDX_FS.CUSIP = DATA_SP.CUSIP AND
( -- This is unmatched
(
(DATA_BS LEFT JOIN DATA_IS ON DATA_BS.CUSIP = DATA_IS.CUSIP AND DATA_BS.4DTYR = DATA_IS.4DTYR)
LEFT JOIN DATA_SP ON DATA_BS.CUSIP = DATA_SP.CUSIP AND DATA_BS.4DTYR = DATA_SP.4DTYR
)
LEFT JOIN DATA_Footnotes.4DTYR ON DATA_BS.CUSIP = DATA_Footnotes.CUSIP AND DATA_BS.4DTYR = DATA_Footnotes.4DTYR
-- A ) here perhaps?
【讨论】:
谢谢!我试过你的编辑,现在我得到一个缺少操作员的错误? 我猜在不匹配的括号之前还有更多错误。AND
真的应该在那里吗?
我是个看不出来的菜鸟!我现在正在尝试不使用 AND。【参考方案2】:
在 FROM 阶段我们指定需要查询的一个或多个表,以及如果表操作符 指定,此阶段从左到右处理这些运算符。连接(左/右)是表运算符,每个表运算符对一个或两个输入表进行操作并返回一个输出表。表运算符的结果用作下一个表运算符的左输入(如果存在),否则用作下一个逻辑查询处理阶段的输入。 在您的查询中,我发现了两个问题:
-
您是否希望在与 DATA_SP 左连接时将整个“AND”条件(第 15 行)添加为 ON 子句中的过滤条件?
在最后一行中,您尝试在 DATA_Footnotes 表的字段 [4DTYR] 上指定左连接,因为左连接运算符希望提供一个表,所以该左连接不正确。
我认为像下面这样的伪代码可能会有所帮助:
select IDX_FS.CUSIP , DATA_BS.[4DTYR]
FROM
IDX_FS
LEFT JOIN DATA_BS
ON IDX_FS.CUSIP = DATA_BS.CUSIP
LEFT JOIN DATA_Footnotes
ON IDX_FS.CUSIP = DATA_Footnotes.CUSIP AND DATA_BS.CUSIP = DATA_Footnotes.CUSIP AND DATA_BS.[4DTYR] = DATA_Footnotes.[4DTYR]
LEFT JOIN DATA_IS
ON IDX_FS.CUSIP = DATA_IS.CUSIP AND DATA_BS.CUSIP = DATA_IS.CUSIP AND DATA_BS.[4DTYR] = DATA_IS.[4DTYR]
LEFT JOIN DATA_SP
ON IDX_FS.CUSIP = DATA_SP.CUSIP AND DATA_BS.CUSIP = DATA_SP.CUSIP AND DATA_BS.[4DTYR] = DATA_SP.[4DTYR]
-- LEFT JOIN DATA_Footnotes.[4DTYR] no need.
希望对你有帮助!!!
【讨论】:
以上是关于SQL:加入语法错误的主要内容,如果未能解决你的问题,请参考以下文章