Как использовать результаты предыдущего запроса в следующем запросе? - PullRequest
0 голосов
/ 22 декабря 2011

В результате этого запроса у меня есть таблица:

select i.id, o.[name]  from Item i
LEFT OUTER JOIN sys.objects o on o.[name]='I' + cast(i.id as nvarchar(20))
where o.name is not null

enter image description here

Теперь мне нужно использовать результат этой таблицы в следующем запросе:

select PriceListItem.ProductExternalId, @id.Id, @id.FriendlyName, @id.BriefWiki,
    [PriceListItem].[ProductExternalDesc]
from [@id]
inner join [Product]  on Product.ItemId = @name and Product.InstanceId = @id.ID
inner join [PriceListItem]  on Product.ID = PriceListItem.ProductId

вместо '@id' я должен использовать данные из таблицы с именем = id, а вместо '@name' я должен использовать данные из таблицы с именем = имя

Ответы [ 3 ]

1 голос
/ 22 декабря 2011

Стандартный способ SQL, работает в большинстве RDBMS

select PriceListItem.ProductExternalId, @id.Id, @id.FriendlyName, @id.BriefWiki,
    [PriceListItem].[ProductExternalDesc]
from 
    (
    select i.id, o.[name]  from Item i
    LEFT OUTER JOIN sys.objects o on o.[name]='I' + cast(i.id as nvarchar(20))
    where o.name is not null
    )
    X
    inner JOIN
    [@id] ON X.id = @id.id --change here as needed
    inner join [Product]  on Product.ItemId = @name and Product.InstanceId = @id.ID
    inner join [PriceListItem]  on Product.ID = PriceListItem.ProductId*
1 голос
/ 22 декабря 2011

Поскольку вы используете SQL 2K8, вы можете использовать CTE:

-- You may need a ; before WITH as in ;WITH
WITH FirstQuery AS (
  select i.id, o.[name]  from Item i
  LEFT OUTER JOIN sys.objects o on o.[name]='I' + cast(i.id as nvarchar(20))
  where o.name is not null
)
select PriceListItem.ProductExternalId,
       FQ.Id,
       -- Neither of these are in your FirstQuery so you can not use them
       -- @id.FriendlyName, @id.BriefWiki,
       [PriceListItem].[ProductExternalDesc]
from FirstQuery FQ
     inner join [Product] on Product.ItemId = FQ.name
                         and Product.InstanceId = FQ.ID
     inner join [PriceListItem]  on Product.ID = PriceListItem.ProductId;

Из одних запросов сложно сказать, как вы планируете JOIN их, но это позволит вам использовать первый запрос в следующем.

Похоже, у вас есть некоторые синтаксические ошибки во втором запросе - @id.id?

0 голосов
/ 22 декабря 2011
select i.id, o.[name]  from Item i
into @temp_table
LEFT OUTER JOIN sys.objects o on o.[name]='I' + cast(i.id as nvarchar(20))
where o.name is not null

Теперь вы можете использовать @temp_table как хотите:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...