【发布时间】:2011-08-10 04:56:44
【问题描述】:
我有一个以下查询,它在子查询中有连接,连接表是从主查询 from 子句中引用的。这是 SQL Server 2000 语法,我正在尝试将其迁移到 2008 语法,但在运行时出现错误。请提出建议。
CREATE TABLE [dbo].[PRODUCT]
(
[pid] [int] NULL,
[NAME] [nchar](10) NULL,
[PDID] [int] NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[PRODUCTDESC]
(
[PDID] [int] NULL,
[DESC] [nchar](10) NULL
) ON [PRIMARY]
--Test Data
insert into PRODUCT values (1,'ONE',1);
insert into PRODUCT values (2,'2',2);
insert into PRODUCT values (3,'3',2);
insert into PRODUCT values (4,'4',null);
insert into PRODUCT values (5,'4',5);
INSERT INTO PRODUCTDESC VALUES (1,'ONENEN');
INSERT INTO PRODUCTDESC VALUES (2,'TWEONEN');
-- SQL Server 2000
SELECT
Name,
(SELECT [DESC]
FROM PRODUCTDESC
WHERE PRODUCT.PDID *= PRODUCTDESC.PDID)
FROM
PRODUCT
--RESULTS
/*
Name (No column name)
ONE ONENEN
2 TWEONEN
3 TWEONEN
4 NULL
*/
-- SQL Server 2008
SELECT
NAME,
(SELECT [DESC]
FROM PRODUCT
LEFT OUTER JOIN PRODUCTDESC ON PRODUCT.PDID = PRODUCTDESC.PDID)
FROM
PRODUCT
--RESULTS
/*
Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
*/
在上面的 2008 年查询中,在子查询中我们如何访问主查询表单子句中引用的 TABLES,这样我就不会得到子查询返回超过 1 个值的错误
请提出建议。
【问题讨论】:
-
sqlnewbie:您无权简单地删除其他所有人帖子的内容,请停止建议这种性质的编辑。我再次回滚你的问题,所以它包含了这里每个人都回答的内容。
-
@wesley - 我又回滚了
-
sqlnewbie,编辑用于澄清、拼写、语法、标点符号、格式等 - 我不确定你的想法,但我认为没有人会感谢你删除答案他们花时间为您提供。
-
@Wesley - 被拒绝。我还标记了 mod 注意。
-
@sqlnewbie:如果您的问题需要澄清,请澄清。但不要只是删除问题文本;那是行不通的。如果您有新问题,请使用“提问”按钮提问。
标签: sql-server tsql sql-server-2008 join sql-server-2000