problema SQL MS SQL Server V.8 UNIÃO
-
11-09-2019 - |
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
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.