2009-07-08 5 views
-1

Ich bin mit dieser Abfrage:SQL MS SQL Server V.8 UNION Problem

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 

Und es gibt 0 Ergebnisse. Was ich versuche, ist eine Union mit meiner PublicationsAreaBuy-Tabelle, die eine publicationID und eine ABID (area buy id) enthält. Was ich versuche zu tun ist, wenn die obige Abfrage eine publicationID zurückgibt, die in der Bereich Buy-Tabelle ist, dann muss ich die Area buy id als Veröffentlichungs-ID einschließen (weshalb ich die Union verwendete).

Dies war mein letzter Versuch, aber es gibt wieder 1 Ergebnis, ob die Top-Abfrage ein Ergebnis zurückgibt oder nicht ... mein Kopf ist völlig leer auf diesem einen!

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

Was ist "V.8"? Meinst du SQL Server 2008? –

+0

Möglicherweise, weil SQL Server 2000 in einem 8.0-Ordner installiert und meldet sich als Version 8 in @@ Version – MartW

Antwort

1

Es tut mir leid, dass ich nicht in der Lage bin, genau zu verstehen, was das Problem ist, aber ich frage mich, ob Ihr Problem rührt von der Tatsache, dass die „UNION“ Operator doppelte Zeilen beseitigen (Art wie ein "SELECT DISTINCT" über die kombinierte Abfrage). Wenn Sie dieses Verhalten nicht möchten, verwenden Sie stattdessen "UNION ALL".

Etwas anderes, was ich sofort bemerkte, war dieser Teil: "(pat.LastAdDate> 7/1/2009)". Es sieht sehr ähnlich aus, als ob Sie "LastAdDate" mit einem fest codierten Datumswert vergleichen möchten. In Wirklichkeit vergleichen Sie "LastAdDate" mit dem Wert von 7 geteilt durch 1 dividiert durch 2009. Da dies eine Ganzzahldivision ist, ist Ihr Ausdruck im Wesentlichen "(pat.LastAdDate> 0)".

Wenn Sie wirklich mit einem fest codierten Datum vergleichen möchten, müssen Sie den Datumswert in einfache Anführungszeichen setzen, wie dies "(pat.LastAdDate> '7/1/2009')". In einer Produktionsanwendung sind hart codierte Daten eine schlechte Idee, aber ich nehme an, dass dies nur für Test/Debugging-Zwecke ist.

+0

die '' keinen Unterschied machen, diese werden über ms Visual Studio entwickelt und es 'weiß' ein Datum. Aber danke, dass du die Frage erstochen hast. – flavour404