2013-03-07 69 views
1

我正在研究一個SQL數據庫項目,我應該找到寫過3本或更多書籍的作者的姓名。我的代碼如下。錯誤說A缺少一個FROM,而我嘗試了不同的COUNT選項。我嘗試了很多不同的變體,但仍然無法生成輸出。有關連接的SQL查詢

SELECT A.alastname FROM Author 
WHERE (SELECT COUNT(*) FROM Book B WHERE B.btitle = A.btitle AND B.title > 2); 

作者包含的名稱和書包含標題,網頁等。還有作者_Book包含援助和出價。我需要使用連接嗎?我仍然不明白如何在不使用操作員的情況下指定3本以上的書籍。我不是要求答案,只是可能的一些指針:)。

+0

嘉獎了你試圖去解決它你自己而不是要求代碼。您可能希望調查HAVING條款作爲另一種解決方案,只包括超過3本書的作者。 – 2013-03-07 05:40:51

回答

2

缺少別名。

SELECT A.alastname FROM Author A 
WHERE (SELECT COUNT(*) FROM Book B WHERE B.btitle = A.btitle AND B.title > 2); 
+1

誰頂起這個?這甚至不是有效的SQL! – mvp 2013-03-07 04:53:38

+0

是的,但它確實回答了他的問題。 – 2013-03-07 04:55:02

+0

這是真的嗎?是否有人喜歡我,我贊成你的運動,誰在乎,如果答案更有意義? – mvp 2013-03-07 04:56:35

0

看起來你失蹤的作者表的別名,並試圖引用它作爲一個

SELECT A.alastname FROM Author as A 
WHERE (SELECT COUNT(*) FROM Book B WHERE B.btitle = A.btitle AND B.title > 2); 
+0

謝謝你WhiteboardDev;我試過了,但仍然出現了錯誤,但它幫助我確定了問題所在。 – 2013-03-07 05:17:01

1

你原來的查詢是不是有效的SQL。

你大概意思是:

SELECT A.alastname 
FROM Author A 
WHERE (SELECT count(*) FROM Book B WHERE B.btitle = A.btitle) > 2 
+0

+1用於修復他的下一個錯誤。 :P – 2013-03-07 05:00:57

+0

是的,我很抱歉,我只是把它輸入,並沒有考慮它的外觀;我很感激你糾正它! – 2013-03-07 05:15:40

0

正如你說你有作者<的關係表 - >書,所以你應該使用它:

SELECT A.alastname 
FROM Author A 
JOIN 
(
SELECT aid FROM Author_Book GROUP BY aid HAVING count(bid)>=3 
) T 
on (A.id=T.aid)