2016-08-18 2 views
0

Ich brauche Ihre Hilfe beim Erstellen einer Abfrage.SQL brauche Hilfe beim Erstellen einer Abfrage

Ich habe zwei Tabellen: für mein Produkt

Die erste Tabelle (Tabelle 1) gibt mir den historischen Status, die alle den Status, dass mein Produkt übergeben und die zweite Tabelle (Tabelle 2) sagt mir in diesem Moment den Status.

Die ID-Spalten sind für beide Tabellen wie die Statusspalte identisch.

Ich möchte eine Abfrage erstellen, die mir die Menge meiner Produkte mit dem Status D, E und F in meiner Tabelle 2 sagt, aber auf meiner Tabelle 1 nicht für den Status C bestanden, wie in den Status B in den Zustand D, E oder F ohne C. vorbei

ich versuchte, läuft diese Abfrage:

select count(id), status 
from table1 e 
where status not in (C) EXISTS (SELECT * 
           FROM table2 c 
           WHERE e.id = c.id 
            AND status IN (D,E,F)) 
group by status 

Die Abfrage kam nicht mit den erwarteten Ergebnissen. Kannst du helfen?

+0

gegeben, dass die Abfrage Syntaxfehler hat, kann man nicht gotte keine Ergebnisse überhaupt haben sollte. Haben Sie wirklich Felder namens 'c',' d', 'e' und' f'? Oder tippst du hier nur die Abfrage von Hand ein und vergisst diese Striche zu zitieren? –

+0

Einfach die Abfrage von Hand hier eingeben und vergessen, diese Zeichenfolgen zu zitieren. Der Name meiner Felder ist in meinen Tabellen anders. – Kirtash7

+0

'nicht in (c) existiert' ist auch falsch. Sie sollten die ACTUAL-Abfrage anzeigen, auch wenn Sie Feldnamen zensieren müssen. Es macht keinen Sinn, nach Hilfe zu fragen, was nicht der eigentliche Code ist. –

Antwort

1

Wie die anderen Responder bemerkt haben, haben Sie einige Syntaxfehler. Im Grunde vermisst du nur ein paar Worte.

select count(id) 
      , status 
from  table1 t1 
where  status not in ('C') 
      *and* 
      EXISTS (
       SELECT  * 
       FROM  table2 t2 
       WHERE  t2.id = t1.id 
          and status in ('D','E','F') 
       ) 
group by status 
; 

Alternativ könnten Sie versuchen, es auf diese Weise zu lösen. Vollständige Offenlegung - dies ist wahrscheinlich nicht so effizient (siehe In vs Exists).

select count(id) 
     , status 
from  table1 
where id not in 
     (
     select id 
     from  table1 
     where  status not in ('C') 

     union 

     select id 
     from  table2 
     where  status in ('D','E','F') 
     ) 
group by status 
; 
+0

Es hat funktioniert. Danke für Ihre Hilfe. – Kirtash7

+0

Kein Problem! Freut mich zu helfen. – ayrenay

0
select count(id), status 
from table1 a, table2 b 
where a.id = b.id 
and a.status not in ('C') 
group by a.status