有关问题不存在



我需要找到所有没有从类别中借书的客户的名称和id,类别名称中有字母'non'。我有这样的代码:

SELECT CLIENT.clientname, CLIENT.client_id
FROM CLIENT
WHERE NOT EXISTS (
  SELECT *
  FROM LEND
  WHERE CLIENT.client_id = LEND.client_id
  AND CATEGORY.category like '%non%'
)

这段代码有什么问题?我已经搜索了好几天来编写正确的代码,我不确定这是否可能(尽管我很确定我马上就会被证明是错误的)。我完全被这个困住了。我的代码总是显示每个借出的书与借出的书有类别"非"在它。

编辑:整个数据库结构已经添加到这里:

  • 作者(包括AuthorID和AuthorName)
  • 图书(bookkid, AuthorID, Year, Title, CategoryID, PublisherID)
  • 类别(CategoryID, CategoryName)
  • 客户端(ClientID, ClientName, Place)
  • Publisher (PublisherID, PublisherName)
  • 出借(编号,图书编号,日期,客户编号)

提前感谢!

您可能错过了与CATEGORY表的JOIN。我重写了que查询以使用NOT IN

SELECT  CLIENT.clientname, CLIENT.client_id
FROM    CLIENT
WHERE   CLIENT.client_id NOT IN
(
    SELECT  DISTINCT LEND.client_id
    FROM    LEND
    JOIN    CATEGORY
        ON  LEND.category_id = CATEGORY.category_id
    WHERE   CATEGORY.category like '%non%'
)

您需要在子查询中以某种方式连接LEND和CATEGORY表。

在不知道你的方案的情况下,我不能确切地说出来,但问题是:

SELECT * FROM LEND WHERE CLIENT.client_id = LEND.client_id AND CATEGORY.category like '%non%' 

您只从LEND中选择,但您的条件引用了"CATEGORY"中的CATEGORY。"%非%"之类的类别

编辑:根据你添加的描述,我猜应该是这样的:

SELECT CLIENT.clientname, CLIENT.client_id
FROM CLIENT
WHERE NOT EXISTS (
  SELECT *
  FROM LEND
  INNER JOIN BOOKS ON LEND.BookID = BOOKS.BookID
  INNER JOIN CATEGORY ON CATEGORY.CategoryID = BOOKS.CategoryID
  WHERE CLIENT.client_id = LEND.client_id
  AND CATEGORY.CategoryName like '%non%'
)

可能因数据库的不同而有所不同。有些数据库区分大小写。

最新更新