使用 FROM 子句中的子查询进行联接操作中的 SQL 语法错误
Posted
技术标签:
【中文标题】使用 FROM 子句中的子查询进行联接操作中的 SQL 语法错误【英文标题】:SQL Syntax Error in Join Operation with Subquery in FROM clause 【发布时间】:2018-10-25 08:19:40 【问题描述】:我一直在抨击这个问题,我相信这是一个超级简单的答案。在 Excel 2016 VBA 中,我有以下 SQL 字符串,但在连接操作中出现语法错误。
SELECT c.code, p.description, p.weight, p.[pack size], p.ppb, p.[CP-UK], p.[CP-EU]
FROM((
SELECT *
FROM [Catalogue Info] as c
LEFT JOIN [Product Information] as p on c.code = p.code
)
LEFT JOIN [;database=C:\mypath\db.accdb;PWD=1234].tbl as pl on c.code = pl.product_code
)
WHERE c.Category = 'VIENNOISERIE'
AND c.Sub_Cat_1 = 'CROISSANTS'
AND c.Sub_Cat_2 = ''
AND p.active = true
ORDER BY c.Page ASC, c.Page_Position ASC;
我尝试在子查询中使用第二个 LEFT JOIN,但我在 SELECT 子句中很难引用它。
有什么想法吗?
【问题讨论】:
你需要使用别名 @Sami 我一直在使用别名,你的意思是什么? 您的发件人没有别名 这里需要别名) --here LEFT JOIN
。
回答@Sami
【参考方案1】:
我会这样认为,
SELECT j.code, j.description, j.weight, j.[pack size], j.ppb, j.[CP-UK], j.[CP-EU]
FROM(
SELECT c.code, p.description, p.weight, p.[pack size], p.ppb, p.[CP-UK], p.[CP-EU],
c.Category,c.Sub_Cat_1,c.Sub_Cat_2,p.active,c.Page,c.Page_Position
FROM [Catalogue Info] as c
LEFT JOIN [Product Information] as p on c.code = p.code
)j
LEFT JOIN [;database=C:\mypath\db.accdb;PWD=1234].tbl as pl on j.code = pl.product_code
WHERE j.Category = 'VIENNOISERIE'
AND j.Sub_Cat_1 = 'CROISSANTS'
AND j.Sub_Cat_2 = ''
AND j.active = true
ORDER BY j.Page ASC, j.Page_Position ASC;
【讨论】:
感谢您的回复。我现在收到一个错误“指定的字段 j.code 可以引用您的 SQL 语句的 FROM 子句中列出的多个表” 而不是子查询中的全选 j 选择 c.code 或 p.code 在这种情况下我需要选择所有其他列吗? 当然,兄弟编码愉快【参考方案2】:假设您查询外部数据库的方式是正确的语法
SELECT c.code, p.description, p.weight, p.[pack size], p.ppb, p.[CP-UK], p.[CP-EU]
FROM [Catalogue Info] as c
LEFT JOIN [Product Information] as p on c.code = p.code
LEFT JOIN [;database=C:\mypath\db.accdb;PWD=1234].tbl as pl on c.code = pl.product_code
WHERE c.Category = 'VIENNOISERIE'
AND c.Sub_Cat_1 = 'CROISSANTS'
AND c.Sub_Cat_2 = ''
AND p.active = true
ORDER BY c.Page ASC, c.Page_Position ASC;
另外,为什么在SELECT
语句中不使用外部数据库(.tbl as pl
)?
【讨论】:
外部数据库的语法是正确的,但在 SELECT 语句中使用它会导致其他问题,因此在我修复此问题时暂时删除。【参考方案3】:使用下面的代码
SELECT c.code, p.description, p.weight, p.[pack size], p.ppb, p.[CP-UK], p.[CP-EU]
FROM((
SELECT *
FROM [Catalogue Info] as c
LEFT JOIN [Product Information] as p on c.code = p.code
) as t
LEFT JOIN [;database=C:\mypath\db.accdb;PWD=1234].tbl as pl on t.code = pl.product_code
) as t1
WHERE t1.Category = 'VIENNOISERIE'
AND t1.Sub_Cat_1 = 'CROISSANTS'
AND t1.Sub_Cat_2 = ''
AND pactive = true
ORDER BY Page ASC, Page_Position ASC;
【讨论】:
以上是关于使用 FROM 子句中的子查询进行联接操作中的 SQL 语法错误的主要内容,如果未能解决你的问题,请参考以下文章