Reply to Re: problem with subselect

Your name:

Reply:


Posted by Erland Sommarskog on 08/31/07 21:33

Bart op de grote markt (warnezb@googlemail.com) writes:
> I have a problem with a subselect I use in a stored procedure:
>
> UPDATE #TEMP_TABLE
> SET P_ID_1=(SELECT top 1 b.P_ID_1 from #TEMP_TABLE b where
> b.ID=PARENT_ID),
> P_ID_2=PARENT_ID,
> P_ID_3=ID
> WHERE PARENT_ID IN (SELECT P_ID_2
> FROM #TEMP_TABLE b)
>
> So the subselect is (SELECT top 1 b.P_ID_1 from #TEMP_TABLE b where
> b.ID=PARENT_ID), and it returns NULL. The cause of that is most
> probably the fact that I try to link ID from inner table b with
> PARENT_ID from the outer table. I thought it had to be done this way,
> but obviously not. Can somebody help me with this syntax problem?

Since there is no prefix to PARENT_ID in the subselect, the column is
taken from the innermost table. That is the subselect is really:

(SELECT top 1 b.P_ID_1 from #TEMP_TABLE b where
b.ID=b.PARENT_ID)

It's good practice to prefix all columns in a query. (Save for queries that
involve one single table.) That avoids nasty surprised like this one.

So write:

UPDATE #TEMP_TABLE
SET P_ID_1 = (SELECT top 1 b.P_ID_1
from #TEMP_TABLE b
where b.ID = a.PARENT_ID),
P_ID_2=a.PARENT_ID,
P_ID_3=a.ID
FROM #TEMP_TABLE a
WHERE a.PARENT_ID IN (SELECT c.P_ID_2
FROM #TEMP_TABLE c)

But what is the subquery intended to achieve. You have a TOP, but there
is no ORDER BY clause. Does this mean that if there are several child
rows, any will do?

--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinfo/previousversions/books.mspx

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация