2013-04-28 110 views
0

我遇到了數據庫作業問題。我需要編寫一個子查詢,它將顯示具有以字母「S」開頭的類別的ISBN和書名。錯誤1242子查詢返回多於一行

表:BOOK(ISBN,類別,標題,說明,版本,兩個publisherId)和類別(CATID,CatDescription)

鍵:BOOK(ISBN_PK,Category_FK)和CATERGORY(CatID_PK)--->類別= CatID

現在我有一些代碼,但它返回一個錯誤。因爲我提前做了這個硬件,而且我們還沒有學習子查詢,所以我在網上發現了我的問題的大部分解決方案。請幫忙。

我的代碼:

SELECT ISBN, title FROM book WHERE category LIKE (SELECT catdescription FROM category WHERE catdescription LIKE 's%') 
+0

'LIKE'需要一個參數,而不是一個列表。 – 2013-04-28 17:10:38

+0

有關模式設計的說明:如果Book.category是Category.CatID的外鍵,最好將其命名爲Book.CatID。這樣的通信立即明顯。它還打開了使用[Natural Join](http://en.wikipedia.org/wiki/Join_(SQL)#Natural_join)的可能性。 – 2013-04-28 17:46:51

+0

它也會明顯表明'book.category'不對應'category.catdescription'。你會想在子查詢中選擇CatID,而不是'select catedescription'。 – 2013-04-28 17:51:24

回答

2

,您可以加入兩個表,而不是使用子查詢,

SELECT a.* 
FROM book a 
     INNER JOIN category b 
      ON a.Category = b.CatID 
WHERE b.CatDescription LIKE 'S%' 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:


考慮使用FULLTEXTSEARCH而不是LIKE如果您使用的是MyISAM引擎。

+1

連接表是關係數據庫的核心。 – 2013-04-28 17:17:03

+0

該問題指出他需要使用子查詢。 – 2013-04-28 17:33:28

+0

@JoelNelson是的,但我收到了比子查詢更好的方式。你可以在你的答案中添加它,如何使用子查詢來完成。 – 2013-04-28 17:34:32

0

改變喜歡在

SELECT ISBN, title FROM book WHERE title IN (SELECT catdescription FROM category WHERE catdescription LIKE 's%') 

編輯:

SELECT ISBN, title FROM book WHERE ISBN IN (SELECT catdescription FROM category WHERE catdescription LIKE 's%') 
OR title IN (SELECT catdescription FROM category WHERE catdescription LIKE 's%') 
+0

它返回空集 – 2013-04-28 17:48:39

+0

因爲你選擇的類別是..當類別是表名,我想你想讓標題喜歡....,嘗試我更新的答案 – 2013-04-28 17:51:21

+0

還是沒有。輸出應該給我的ISBN和標題有相應的類別,以「s」字母開頭。如果可以,我現在會嘗試上傳圖表的圖像和所需的輸出。 – 2013-04-28 18:08:41

0

不能使用像一個子查詢。更可能的是,只改變到以下查詢也可以。

SELECT ISBN, title 
    FROM book 
    WHERE category in (SELECT catdescription 
         FROM category WHERE catdescription LIKE 's%') 

這假定book.category字段對應category.catdescription字段。

+0

如果子查詢返回一個字符串,你確定它不會工作嗎?錯誤似乎說這是這裏的問題。不,這樣做會是明智的... – 2013-04-28 17:15:16

+0

好吧,現在你已經對我感興趣了。它確實有效,但前提是隻有一個結果,並且只有當catdescription與一個通配符串串聯時纔有意義。我以前從未需要它... – 2013-04-28 17:25:09

+0

它返回空集 – 2013-04-28 17:48:08

相關問題