Pergunta

Eu estou usando esta consulta:

SELECT DISTINCT pat.PublicationID
FROM         dbo.PubAdvTransData AS pat INNER JOIN
                  dbo.PubAdvertiser AS pa ON pat.AdvTransID = pa.AdvTransID
WHERE     (pa.AdvertiserID = 31331) AND (pat.LastAdDate > 7 / 1 / 2009)
ORDER BY pat.PublicationID

E ele retorna 0 resultados. O que estou tentando fazer é adicionar em uma união com minha mesa PublicationsAreaBuy, que contém uma publicationID e um ABID (área buy id). O que estou tentando fazer é, se a consulta acima retorna um publicationID que está na tabela buy área, então eu preciso incluir (que é por isso que eu estava usando a união) da área buy id como um ID de publicação.

Esta foi a minha última tentativa, mas novamente ele retorna 1 resultado se a consulta top retorna um resultado ou não ... minha mente passou completamente em branco em um presente!

SELECT DISTINCT pat.PublicationID
FROM         dbo.PubAdvTransData AS pat INNER JOIN
                  dbo.PubAdvertiser AS pa ON pat.AdvTransID = pa.AdvTransID
WHERE     (pat.LastAdDate > 7 / 1 / 2009) AND (pat.PublicationID = 29171)
UNION
SELECT     AreaBuy.AreaBuyID AS PublicationID
FROM         AreaBuy INNER JOIN
                  PublicationAreaBuy ON AreaBuy.AreaBuyID =         PublicationAreaBuy.AreaBuyID INNER JOIN
                  dbo.PubAdvertiser AS PubAdvertiser_1 ON PubAdvertiser_1.PublicationID = PublicationAreaBuy.PublicationID
ORDER BY pat.PublicationID
Foi útil?

Solução

Eu sinto muito que eu não sou capaz de compreender exatamente o que o seu problema é, mas eu me pergunto se o problema decorre do fato de que o operador "UNIÃO" irá eliminar linhas duplicadas (como uma espécie de "SELECT DISTINCT" através da consulta combinado). Se você não quiser esse comportamento, use "UNION ALL" em vez.

Outra coisa que eu notei imediatamente foi esta parte: "(pat.LastAdDate> 7/1/2009)". Ele se parece muito com você está tentando comparar "LastAdDate" para um valor de data hard-coded. Na realidade você está comparando "LastAdDate" para o valor de 7 dividido por 1 dividido por 2009. Desde que esta é a divisão inteira, a sua expressão é essencialmente "(pat.LastAdDate> 0)".

Se você realmente quer para comparar com uma data codificado, você precisa colocar o valor de data entre aspas simples, como este "(pat.LastAdDate> '2009/07/01')". Em um aplicativo de produção, datas codificados são uma má idéia, mas eu suponho que este é apenas para testar / fins de depuração.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top