簡體   English   中英

如何將這兩個SQL查詢合並為一個?

[英]How to combine these two SQL queries into one?

顯示請求多於報價的城市。

我進行了這兩個查詢,以顯示每個城市的消費者有多少個請求,然后向每個城市的有報價的供應商提出一個請求。 是的,這是實驗室的一部分,每個輸出都給了我,但是我已經堅持了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問題時,請添加您的DBMS(例如MySQL,SQL Server,PostgreSQL等)

這不僅困擾着您,而且對於SQL,語法可能會因數據庫的不同而發生很大變化。


說完之后,我將使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM