2012-04-05 63 views
0

可能重複:
Writing an SQL query to SELECT item from the following table麻煩寫SELECT查詢下表爲

我想列出的供應商(SNAME)和部件號(PNUM)的名字至少有兩個不同部件的供應商。

這裏有兩個表我需要工作...

貨量表: http://i44.tinypic.com/1zdcc9j.jpg

供應商表: http://i39.tinypic.com/o6w414.png

我試了一下:

這是不正確,我沿着這些線路嘗試了一些...

SELECT snum 
FROM (SELECT snum, count(snum) AS nbr FROM Shipments) 
WHERE nbr > 1; 

謝謝

+2

爲什麼這個問題被標記爲'mysql' a nd'access'? – 2012-04-05 02:29:48

+0

b/c我正在使用access來實現這個sql查詢。 – CSoverIT 2012-04-05 02:34:25

+1

首先,請不要在標題行中放置標籤信息;這就是標籤設計要做的事情。 (你使用'SELECT'和標記爲'MySQL'和'SQL'的事實使得''在主題中是冗餘的,額外的措辭掩蓋了這個問題。)其次,你需要編輯以提供表格信息。基本信息的非現場鏈接意味着如果這些外部網站脫機或消失,您的問題就變得毫無意義。它也使得你的問題對於未來的用戶是不可搜索的。謝謝。 :) – 2012-04-05 02:35:53

回答

0
SELECT suppliers.sname, shipments.pnum 
FROM suppliers, shipments 
WHERE shipments.snum = suppliers.snum 
GROUP BY suppliers.sname 
HAVING count(shipments.pnum) >= 2 
+0

謝謝!我很欣賞這個答覆,這不起作用的原因:/儘管對我來說完全有意義。當我嘗試運行這個查詢時說,'sname'沒有包含在聚合函數中,我在訪問時遇到了錯誤。 – CSoverIT 2012-04-05 02:39:57

+0

@CSoverIT嗯,你是否得到語法錯誤? – 2012-04-05 02:40:51

+0

@ CSoverIT我用'> ='而不是'>',也許這就是原因,請檢查:) – 2012-04-05 02:41:49

0

您使用聚合函數,如COUNT時需要使用GROUP BY子句。當使用Aggregates和GROUP BY時,HAVING CLAUSE充當where子句。

這將讓你有一個計數> 1

SELECT snum 
FROM 
(
    SELECT snum, count(snum) AS nbr 
    FROM Shipiments 
    GROUP BY snum 
    HAVING COUNT(snum) > 1 
) AS T 

這將加入表背到供應商表來獲取供應商名稱的所有snums

SELECT DISTINCT Suppliers.sname 
FROM 
(
    SELECT snum, count(snum) AS nbr 
    FROM Shipiments 
    GROUP BY snum 
    HAVING COUNT(snum) > 1 
) AS T INNER JOIN Suppliers ON Suppliers.snum = T.snum 
+0

這不會列出名稱,只有數字......我想弄清楚如何將供應商的名稱鏈接到列出的項目,謝謝你。 – CSoverIT 2012-04-05 02:43:30

+0

嘗試添加的底部查詢。假設連接是正確的,它會爲您提供所有具有2個或更多貨件的供應商名稱。 – 2012-04-05 02:49:26

0

我不知道關於訪問(因爲這個問題被標記爲這樣),但這應該在MySQL中工作:

select su.sname from suppliers su 
join shipments sh on su.snum = sh.snum 
group by su.sname 
having count(distinct su.pnum) >= 2