2016-08-01 9 views
1

Entschuldigung für keine SQL, meine SQL-Fähigkeiten sind grundlegend und ich habe nicht auf diese Art von Anforderung zuvor gestoßen.SELECT-Zeile (n) aus einer Tabelle, wo Wert nicht existiert in einer Gruppe von verwandten Datensätzen

Mit einer Tabelle wie die unten:

Tabelle

id size batch code product code 
--------------------------------------- 
1  91  55555  BigD Red 
2  94  55555  BigD Red 
3  91  44444  BigD Blue 
4  92  44444  BigD Blue 
5  93  44444  BigD Blue 
6  94  44444  BigD Blue 
7  91  33333  BigD Orange 
8  94  33333  BigD Orange 

Wie eine SQL-Anweisung zu konstruieren, die die folgenden Ergebnisse zurückgibt?

Ergebnis

id size batch code product code 
-------------------------------------- 
1  91  55555  BigD Red 
7  91  33333  BigD Orange 

Datensätze werden nach Produktcode gruppiert. Innerhalb jeder Gruppe suche ich nur nach den Gruppen, die NICHT eine Größe von '92' enthalten ... und einen einzelnen Datensatz mit der Größe '91' aus jeder dieser Gruppen anzeigen möchten. Größe 91 ist immer in jeder Gruppe vorhanden.

+2

SQL-Server oder MySQL? – Jens

+0

@Jens SQL-Server – Andy

Antwort

1

Hier ist eine generische Version mit not exists:

select * 
from yourtable y1 
where size = 91 and not exists (
    select 1 
    from yourtable y2 
    where y1.productcode = y2.productcode and y2.size = 92) 
+0

Perfekt, danke! Mein Rep ist zu niedrig für das Voting, aber auch für die Bereitstellung von SQL Fiddle Demo. – Andy

0

Sie suchen NOT EXISTS auf NOT IN

select * 
    from myTable t 
where t.size=91 
    and not exists (select 1 from myTable t1 
        where t1.productCode=t2.productCode 
         and t1.size=92) 
+1

Danke, ähnlich wie angenommene Antwort. Funktioniert super! – Andy

0

Nicht sicher MySql, aber diese w ill Arbeit mit SQL Server:

SELECT T1.Id, T1.Size, T1.BatchCode, T1.ProductCode 
FROM Table T1 
LEFT JOIN 
(
    SELECT ProductCode 
    FROM Table 
    WHERE Size = 92 
) T2 ON T1.ProductCode = T2.ProductCode 
WHERE T1.Size = 91 
AND T2.ProductCode IS NULL 
0
Select * from myTable t 
Where id = 
    (Select Min(id) from myTable -- < need this to ensure only one 
    where product code = t.product code 
     and size = 91 
     and not exists 
      (Select * from myTable 
      Where product code = t.product code 
       and size = 92)) 
0
select * from myTable where size!=92 
group by productcode having size=91 
+0

Dieser gibt nur einen aus jeder Gruppe – jophab

Verwandte Themen