2017-11-20 2 views
0

Ich habe zwei Tabellen, die in einer unten genannten Weise verwandt sind.Überprüfen Sie, ob alle Werte in Bereich in der Tabelle vorhanden sind oder nicht, SQL Server

  • Tabelle 1 enthält drei Spalten ProductId, VersionIn und VersionOut
  • Table2 enthält Spalten ProductId und Version

Ich brauche 1 die Datensätze der Tabelle, um herauszufiltern, basierend auf den Kriterien entsprechen.

Wenn Tabelle 2 hat alle Versionen zwischen VersionIn (einschließlich) und VersionOut (exklusiv) [VersionIn, VersionOut) dann wird der Datensatz ausgewählt sonst muss sie verworfen werden. Was verworfen wird, ist hier von Interesse.

Zum Beispiel: Tabelle 1

ProductId VersionIn VersionOut 
----------------------------------- 
    100   1   3 
    100   3   6 

Table2

ProductId Version 
------------------- 
    100   1 
    100   2 
    100   3 
    100   4 
    101   1 

In diesem Szenario Datensatz 1 von Tabelle 1 ist gültig, weil die Version 1, 2 in der Tabelle ist 2. Aber Rekord 2 von Tabelle 1 ist ungültig (und Zinsen), da 5 in der Tabelle fehlt (da Version suchen = 3, VersionOut = 6 Mittel [3, 6) oder [3,5])

ich versuchte dies:

select 
    T1.ProductId, T1.VersionIdIn, T1.VersionIdOut, T2.VersionId 
from 
    Table1 as T1 
inner join 
    Table2 as T2 on T1.ProductId = T2.ProductId 
       and T2.VersionId between T1.VersionIdIn and T2.VersionIdOut 

und die Art, wie ich bin Überprüfung, ob alle aufeinanderfolgende vorhanden sind, ist von unten Abfrage:

select 
    T1.ProductId, T1.VersionIdIn, T1.VersionIdOut, count(VersionId) 
from 
    Table1 as T1 
inner join 
    Table2 as T2 on T1.ProductId = T2.ProductId 
       and T2.VersionId between T1.VersionIdIn and T1.VersionIdOut - 1 
group by 
    ProductId, VersionIdIn, VersionIdOut 

Bei weniger als VersionOut-Version suchen dann gibt es fehlende Werte in Tabelle 2.

Ich möchte wissen, ob dieser Ansatz korrekt und narrensicher ist und eine bessere Möglichkeit, dies zu tun ist möglich. Ich bin neu in SQL und kann seine Kraft zu schätzen, aber manchmal fühlen sich eingeschränkt, wenn es um die Programmierung Bedingungen, die ich finde viel einfacher in Programmiersprachen

+0

Sieht gut aus für mich. Besser als eine Summe zu machen. – muratgu

Antwort

0

Ihre Lösung wäre falsch, wenn Datensätze in Tabelle2 mit doppelten Werten von ProductID und Version vorhanden sind. Sie können entweder sicherstellen, dass für diese beiden Felder ein eindeutiger Index vorhanden ist, oder Ihre Abfrage könnte Count (Distinct VersionID) anstelle von Count (VersionID) verwenden. Ansonsten kann ich mir keinen Weg vorstellen, wo das schief gehen würde.

+0

ja, kümmerte sich darum. Danke für das Aufzeigen. – Abhi7950

Verwandte Themen