2016-09-26 18 views
1

何らかの理由で、このSQLを実行しようとすると構文エラーが発生します。EXISTSを使用したSQL構文エラー

SELECT C.CUSTNUM 
FROM CUSTOMERS AS C 
WHERE C.CUSTNUM EXISTS (
    SELECT P.CNUM 
    FROM PURCHASES AS P 
    WHERE P.PNUM EXISTS (
     SELECT * 
     FROM PRODUCTS AS PR 
     WHERE PR.MSRP = 9.99)) 

括弧を閉じるようにしましたが、依然としてクエリ式に構文エラーがあります。おそらく私のコードには欠けているものがあります。何か案は?本当にありがとう。あなたは、サブクエリ自体の中で制約を指定EXISTSを使用する場合

+0

をEXISTSで使用したいと思いますか? 'mysql'、' postgresql'、 'sql-server'、' oracle'、 'db2'のどれかを指定するタグを追加してください。 –

答えて

0

この

SELECT C.CUSTNUM 
FROM CUSTOMERS AS C 
WHERE EXISTS (
    SELECT P.CNUM 
    FROM PURCHASES AS P 
    WHERE EXISTS (
     SELECT * 
     FROM PRODUCTS AS PR 
     WHERE PR.MSRP = 9.99)) 
0

を試してみてください。サブクエリが与えられた条件C.CUSTNUM = P.CNUMに対して少なくとも1つの行を返した場合、その条件は満たされたとみなされます。

これはJOINPRODUCTSテーブルで書き直すことができたと思います。

SELECT C.CUSTNUM 
FROM CUSTOMERS AS C 
WHERE EXISTS (
    SELECT 1 
    FROM PURCHASES AS P 
    JOIN PRODUCTS AS PR ON 
     ON P.PNUM = PR.PNUM -- not sure what column to join on in PRODUCTS 
    WHERE 
     C.CUSTNUM = P.CNUM -- added the correlation, I believe this is what you mean 
     PR.MSRP = 9.99 
    ) 

付属していない場合、単に変更したクエリに固執:

SELECT C.CUSTNUM 
FROM CUSTOMERS AS C 
WHERE EXISTS (
    SELECT 1 
    FROM PURCHASES AS P 
    WHERE 
     EXISTS (
     SELECT 1 
     FROM PRODUCTS AS PR 
     WHERE PR.MSRP = 9.99 
     ) 
     AND C.CUSTNUM = P.CNUM 

が、少なくとも1つの行があることがPRODUCTSテーブルに存在する場合、外側のサブクエリはPURCHASESからすべての行を返すことに注意してください列の一致にかかわらずMSRP = 9.99があります(列間の相関の条件は指定しません)。

0

の使用例は、EXISTS:

create table tab1(id1 number); 
create table tab2(id2 number); 
insert into tab1 values (1); 
insert into tab1 values (2); 
insert into tab2 values (2); 
select * 
from tab1 
where exists (select 1 
       from tab2 
       where tab2.id2 = tab1.id1 
      ) 

結果:サブクエリはあなたが何をする必要があるかのようですいくつかのフィールドに基づいて、外側の一つに相関していることを2

注意してください。

0

私はあなたの代わりに、RDBMSはこのです

SELECT C.CUSTNUM 
FROM CUSTOMERS AS C 
WHERE C.CUSTNUM IN (
    SELECT P.CNUM 
    FROM PURCHASES AS P 
    WHERE P.PNUM IN (
     SELECT PR.PNUM /* I'm unsure of the proper column here*/ 
     FROM PRODUCTS AS PR 
     WHERE PR.MSRP = 9.99))