2016-08-18 21 views
0

私はあなたの助けを必要としています。SQLはクエリを構築するのに役立つ必要があります

私は2つのテーブルがあります:最初の表(TABLE1)は私の歴史的地位を与える

を、すべての私の製品が渡された状態と第二のテーブル(表2)は私に私の製品のため、この時点での状況を伝えます。

idカラムは、両方のテーブルでステータスカラムのように同じです。

私のテーブル2にステータスD、E、Fがある私の製品の量を教えてくれるクエリを作成したいが、ステータス1のようにステータス1のテーブル1が渡されなかったC.

に介さず、状態D、EまたはFにB私はこのクエリを実行してみました:

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 

クエリが期待される結果に返されませんでした。手伝ってくれますか?

+0

、あなたはgotteにすべての任意の結果を持っていてはいけません。あなたは本当に 'c'、' d'、 'e'、' f'という名前のフィールドを持っていますか?または、ここで手作業でクエリを入力するだけで、それらの文字列を引用するのを忘れていますか? –

+0

ここで手作業でクエリを入力し、それらの文字列を引用するのを忘れてしまった。私のフィールドの名前は私のテーブルでは違う。 – Kirtash7

+0

'not in(c)exists'も間違っています。フィールド名を検閲する必要がある場合でも、ACTUALクエリを表示する必要があります。実際のコードではないものについて助けを求めることには意味がありません。 –

答えて

1

他の回答者が指摘したように、構文エラーがあります。基本的に、あなたはちょっとした言葉がありません。

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 
; 

また、この方法で解決することもできます。完全開示 - おそらく効率的ではありません(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

それは働いた。ご協力ありがとうございました。 – Kirtash7

+0

問題ありません!助けてうれしい。 – 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 
関連する問題