错误1242子查询返回多于1行

时间:2013-04-28 17:06:26

标签: mysql sql

我的数据库作业有问题。我需要编写一个子查询,该子查询将显示具有以字母“S”开头的类别的ISBN和书名。

表:BOOK(ISBN,类别,标题,描述,版本,PublisherID)和CATEGORY(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%')

3 个答案:

答案 0 :(得分:2)

您可以加入两个表而不是使用子查询,

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

要进一步了解联接,请访问以下链接:


如果您使用FULLTEXTSEARCH引擎,请考虑使用LIKE而不是MyISAM

答案 1 :(得分:0)

将LIKE改为IN

   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%')

答案 2 :(得分:0)

您不能在子查询中使用like。更有可能的是,只需更改到以下查询也可以。

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

这假设book.category字段对应于category.catdescription字段。