2009-07-08 6 views
-1

J'utilise cette requête:SQL MS SQL Server V.8 problème UNION

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 

et renvoie 0. Ce que j'essaie de faire est d'ajouter une union avec ma table PublicationsAreaBuy, qui contient un ID de publication et un ABID (ID d'achat de zone). Ce que j'essaie de faire est que si la requête ci-dessus renvoie un ID de publication qui se trouve dans la table d'achat de zone, je dois inclure (ce qui explique pourquoi j'utilise le syndicat) l'ID d'achat de zone comme ID de publication.

C'était ma dernière tentative mais encore une fois il renvoie 1 résultat si la requête supérieure renvoie un résultat ou pas ... mon esprit est devenu complètement vide sur celui-ci!

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 
+0

Qu'est-ce que c'est «V.8»? Voulez-vous dire SQL Server 2008? –

+0

Peut-être parce que SQL Server 2000 s'installe dans un dossier 8.0 et se signale comme la version 8 dans @@ version – MartW

Répondre

1

Je suis désolé que je ne suis pas en mesure de comprendre exactement ce que votre problème est, mais je me demande si votre problème provient du fait que l'opérateur « UNION » éliminera les doublons (comme une sorte de "SELECT DISTINCT" sur la requête combinée). Si vous ne voulez pas ce comportement, utilisez plutôt "UNION ALL".

Quelque chose d'autre j'ai remarqué tout de suite cette partie: "(pat.LastAdDate> 7/1/2009)". Il semble que vous essayez de comparer "LastAdDate" à une valeur de date codée en dur. En réalité, vous comparez "LastAdDate" à la valeur de 7 divisé par 1 divisé par 2009. Comme c'est une division entière, votre expression est essentiellement "(pat.LastAdDate> 0)".

Si vous voulez vraiment comparer avec une date codée en dur, vous devez mettre la valeur de la date entre guillemets simples, comme ceci "(pat.LastAdDate> '7/1/2009')". Dans une application de production, les dates codées en dur sont une mauvaise idée, mais je suppose que c'est juste à des fins de test/débogage.

+0

les '' ne font aucune différence, ils sont en cours de développement via MS Visual Studio et il 'sait' une date. Mais merci d'avoir poignardé la question. – flavour404