2017-11-01 11 views
0

オファーより多くのリクエストがある都市を表示します。これらの2つのSQLクエリを1つに結合する方法は?

私はこれらの2つのクエリを行って、各都市の消費者からのリクエストの数を表示し、次に各都市のオファーを持つサプライヤのリクエストを表示しました。はい、これは実験室の一部ですが、私は各出力を与えられていますが、私は今この2時間についてきました。私は考えることができるすべてを試しましたが、それも最後の問題です。

SELECT COUNT(c.Con_ID) 'Requests', city 
FROM tb_requests r, Tb_Consumer c, Tb_Product p 
WHERE r.Con_ID = c.Con_ID 
    AND r.Prod_ID = p.Prod_ID 
    ANd p.Name = 'computer' 
    group by city 

SELECT COUNT(s.supp_id) 'Offers', city 
FROM Tb_offers o, Tb_supplier s, Tb_Product p 
WHERE o.supp_ID = s.supp_ID 
    AND o.Prod_ID = p.Prod_ID 
    ANd p.Name = 'computer' 
    GROUP By city 

出力は次のようなものです:

Number  city 
----------- ------------------------------ 
2   New York 
4   Wausau 

(2 row(s) affected) 

Number  city 
----------- ------------------------------ 
2   Chicago 
1   London 
4   Madison 
2   Stevens Point 
3   Wausau 

(5 row(s) affected) 

正しい出力が(一緒にしている)、このようになります。

City       Computer Offers Computer Requests 
------------------------------ --------------- ----------------- 
Wausau       3    4 

(1 row(s) affected) 

はありがとうございました!あなたはSQL質問をすると

+1

クエリは無効です。標準SQLです。どちらの[DBMS](https://en.wikipedia.org/wiki/DBMS)製品を使用していますか? "_SQL_"はクエリ言語であり、特定のデータベース製品の名前ではありません。 –

+1

これらの参加者は97人です!適切なJoin構文を使用してテーブルに参加してください。読みやすく管理しやすくなります。私たちは気難しいように見えるかもしれませんが、それはもっと良いことのためです。 –

+0

'city 'に内部結合しようとしているようです – Jimmy

答えて

0

は、お使いのDBMS(例えばMySQLの、SQL Serverの、PostgreSQLの、など)それはちょうどあなたを悩まについてではありません

を追加してください、しかし、SQLで構文が強くDBの応じて変更することができます。


これを言った後、私は、ANSI SQL(すべてのまともなDB上で動作するはずです)に行くよ:

SELECT t1.city, Offers, Requests 
FROM (
    SELECT COUNT(c.Con_ID) Requests, city 
    FROM tb_requests r, Tb_Consumer c, Tb_Product p 
    WHERE r.Con_ID = c.Con_ID 
    AND r.Prod_ID = p.Prod_ID 
    ANd p.Name = 'computer' 
    group by city 
    ) t1 
INNER JOIN (
    SELECT COUNT(s.supp_id) Offers, city 
    FROM Tb_offers o, Tb_supplier s, Tb_Product p 
    WHERE o.supp_ID = s.supp_ID 
    AND o.Prod_ID = p.Prod_ID 
    ANd p.Name = 'computer' 
    GROUP By city 
    ) t2 
    ON t1.city = t2.city 
WHERE Requests > Offers 

そして、あなたはもう少しきれいな何かをしたい場合は、これは正確に同じことを行う必要があります:

SELECT city, COUNT(s.supp_id) Offers, COUNT(c.Con_ID) Requests 
FROM Tb_Product p 
    LEFT JOIN Tb_offers o ON p.Prod_ID = o.Prod_ID 
     LEFT JOIN Tb_supplier s ON o.supp_ID = s.supp_ID 
    LEFT JOIN tb_requests r ON p.Prod_ID = r.Prod_ID 
     LEFT JOIN Tb_Consumer c ON r.Con_ID = c.Con_ID 
WHERE p.Name = 'computer' 
GROUP BY city 
HAVING COUNT(c.Con_ID) > COUNT(s.supp_id) 
+0

正確な回答が得られる前に、より多くの情報が必要であることが明らかであれば、回答を投稿するのは生産的ではありません。これは、あなたが正しく推測したかどうかを改善するために、ポスターからすべてのインセンティブを取り除きます。なぜこれが答えになるのか、知識を共有するために何か努力をしたのか説明していない。 SQLをダンプしました。あなたが提供した唯一のテキストは、質問に残しておかなければならないコメントです。 –

+0

ありがとうございます。私はすべてを含んでいないのが大変残念です。私は通常、頻繁に助けを求めません! –

関連する問題