Sql server 有关的问题不存在

Sql server 有关的问题不存在,sql-server,tsql,exists,Sql Server,Tsql,Exists,我需要找到所有没有从类别名称中包含字母“non”的类别借书的客户的姓名和ID。我有以下代码: 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%' ) 这个代码有什么问题?我已经花了好几天的时间来为它

我需要找到所有没有从类别名称中包含字母“non”的类别借书的客户的姓名和ID。我有以下代码:

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%'
)
这个代码有什么问题?我已经花了好几天的时间来为它编写正确的代码,我甚至不确定这是否可能(尽管我很确定我会立即被证明是错的)。我完全被这件事难住了。我的代码总是显示每一本借出的书,其中包含“non”类别的借出书

编辑:已在此处添加整个数据库结构:

  • 作者(由AuthorID和AuthorName组成)
  • 图书(书号、作者、年份、标题、类别、出版商)
  • 类别(CategoryID,CategoryName)
  • 客户(客户ID、客户名称、地点)
  • 出版商(PublisherID、PublisherName)
  • 借出(编号、BookID、日期、客户ID)

提前谢谢

您可能缺少与
类别
表的联接。我重写了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%' 
您仅从“借出”中选择,但您的条件引用了“CATEGORY.CATEGORY like“%non%”中的类别

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

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

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

子查询中的
lend
category
之间可能缺少联接。您在子查询中引用了
category
,但根本没有对其进行范围限定。我以前从未学习过什么是联接,以及如何使用联接,DISTINCT或ON。代码仍然不起作用,因为LEND.category\u id在表LEND中不存在;为什么不回答这个问题并添加表模式呢?我无法纠正您的代码,因为我不知道JOIN是如何工作的。我大概三周前才开始写代码。我的老师从来没有告诉我什么是JOIN,也没有告诉我JOIN一开始就存在。我刚刚发现JOIN是在手册后面的部分中被教授的,所以我甚至不知道JOIN是否是解决这个问题的正确方法。我所知道的是,当我使用我现在学到的所有知识时,这个问题无法解决,它就是不起作用。你不能把你的表结构放到问题中吗?我会立即这样做。当我输入你的代码时,我得到以下错误:“将nvarchar值‘非虚拟’转换为数据类型int时转换失败。”我使用荷兰语工作,因此使用了“非虚拟”部分。在我的数据库的表类别中,只有三个条目:“1:非虚拟,2:虚拟,3:Wetenschapelijk(意思是‘科学’)问题是,我不能要求TSQL省略“非虚构”,因为这个问题字面上表示省略字母“非”。我明天一定会回来进一步研究如何解决这个问题,我真的很想了解!