【发布时间】:2014-04-08 01:29:57
【问题描述】:
我已经阅读了很多关于该主题的内容,但我无法让它适用于我的案例。
我有以下情况:
- 订单项列表(我要获取的主要数据集)
- 与订单项具有 1:1 关系的文章
- 一个 n:m 可连接的“Articlesupplier”,它在文章和文章之间创建关系 合作伙伴
- 包含合作伙伴详细信息的合作伙伴表。
目标:
每个 OrderItem 和来自供应商的一个数据集我只想获得在连接中找到的第一个数据集。不需要优先级。
表格:
表IDX_ORDERITEM
id,article_id
表IDX_ARTICLE
id,name
表IDX_ARTICLESUPPLIER
article_id,partner_id
表IDX_PARTNER
id,abbr
我的实际陈述(简短版):
SELECT IDX_ORDERITEM.id
FROM
dbo.IDX_ORDERITEM AS IDX_ORDERITEM
-- ARTICLE --
INNER JOIN dbo.IDX_ARTICLE AS IDX_ARTICLE
ON IDX_ORDERITEM.article_id=IDX_ARTICLE.id
-- SUPPLIER VIA ARTICLE --
LEFT JOIN
(SELECT TOP(1) IDX_PARTNER.id, IDX_PARTNER.abbr
FROM IDX_PARTNER, IDX_ARTICLESUPPLIER
WHERE IDX_PARTNER.id = IDX_ARTICLESUPPLIER.partner_id
AND IDX_ARTICLESUPPLIER.article_id=IDX_ARTICLE.id) AS IDX_PARTNER_SUPPLIER
ON IDX_PARTNER_SUPPLIER.id=IDX_ARTICLE.supplier_partner_id
WHERE 1>0
ORDER BY orderitem.id DESC
但似乎我无法在子查询中访问 IDX_ARTICLE.id。我收到以下错误消息:
无法绑定多部分标识符“IDX_ARTICLE.id”。
是文章别名与表名同名的问题吗?
非常感谢您提供可能的想法, 迈克
【问题讨论】:
-
将您的表称为
IDX_......是一个非常不幸、错误的命名约定 - 直观上指的是 索引 - 而不是表! -
你是对的,但不幸的是,这不是我的数据库,ERP 系统的名称是“IDX”,这就是这种命名约定的原因。
标签: sql sql-server tsql join left-join