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
undVersionOut
- Table2 enthält Spalten
ProductId
undVersion
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
Sieht gut aus für mich. Besser als eine Summe zu machen. – muratgu