如何从一个表中选择在另一表中由于某种条件而在另一表中不存在的所有记录?

DfrDkn

所有书籍表

CREATE TABLE [dbo].[Book](
    [Id] [uniqueidentifier] NOT NULL,
    [ISBN10] [nvarchar](50) NULL)

卖方拥有的书籍

CREATE TABLE [dbo].[BookSeller](
    [Id] [uniqueidentifier] NOT NULL,
    [ISBN10] [nvarchar](50) NULL,
    [SellerId] int NOT NULL
)

在数据库簿中插入记录

 INSERT INTO BOOK (Id, ISBN10)
    VALUES 
    (NEWID(), 'A'),
    (NEWID(), 'B'),
    (NEWID(), 'C'),
    (NEWID(), 'D'),
    (NEWID(), 'E'),
    (NEWID(), 'F'),
    (NEWID(), 'G')
   

在数据库BookSeller中插入记录

INSERT INTO [BookSeller] (Id, ISBN10, SellerId)
VALUES 
(NEWID(), 'A', 1),
(NEWID(), 'B', 1),
(NEWID(), 'B', 2),
(NEWID(), 'C', 1),
(NEWID(), 'C', 3),
(NEWID(), 'C', 4),
(NEWID(), 'D', 3),
(NEWID(), 'E', 3),
(NEWID(), 'F', 1),
(NEWID(), 'G', 3)

Id  ISBN10
280C283E-4087-4AFF-9761-358E8F7BC302    A
9FE76BBC-4AB1-436E-8135-2A13FA15CD24    B
C8098DE4-2FC9-4710-B7F9-1D4A92A058CF    C
E48D1CCE-1408-45F6-96BA-7439F56640CC    D
9EF7EFD6-659F-4109-A78A-5CB3E54CDC3E    E
078EB851-945B-4728-9D0F-F45B8A7D742D    F
C33943D5-D01C-480D-BFA5-1B48AA59EDE7    G

售书商

Id  ISBN10  SellerId
73CC3266-98CB-426F-AD51-312ADD9CBAF9    A   1
37F09E06-8598-4DB1-9693-F47438B3CB52    B   1
E7A06C9C-8EFC-43F9-A44E-55B5D839B5ED    B   2
A336D899-CA32-47CA-8E39-44F816E08FB0    C   1
11AC0177-9E2D-4AA3-858E-F09C47ACE2E5    C   3
E9A32B1B-66E5-4734-AB87-48FA3D95A34A    C   4
60C0D7CD-6F27-4CEE-A3C5-344542623D87    D   3
E8B00921-1985-4FD2-8024-6D03D55DB869    E   3
1D8A2AF3-512F-4B7E-8857-2279A36F851D    F   1
00E2366E-1478-4408-A265-399E77575714    G   3

我想要卖方1和卖方3不包含的书。其他可能会有。因此,对于当前条目,不应返回任何记录,但是它正在返回

Select B.ISBN10 from Book B
LEFT JOIN BookSeller S
ON B.ISBN10 = S.ISBN10
Where SellerId NOT IN (1, 3)

结果错误

ISBN10
B
C

理想情况下,不应该返回任何结果,因为所有书籍都包含1和3

我想避免子查询,因为具有太多记录的子查询会导致性能下降

戴尔K

您需要not exists从Book中选择全部,即not existsBookSeller中同一本书以及SellerId 1或3的记录。

select B.ISBN10
from Book B
where not exists (
    select 1
    from BookSeller S
    where B.ISBN10 = S.ISBN10
    and SellerId IN (1, 3)
)

注意-您的问题标题实际上为您提供了答案:)

另外,关于您关于不使用子查询的评论;你应该为查询引擎是比你想象通常要更好地过早优化限制你的选择。我可以向您保证,我已经在大型表上使用了这样的构造,没有任何问题。

您应该始终使用最简单的逻辑来构建查询,并信任SQL Server来构建良好的查询计划。通过尝试优化自己,您实际上可能会强制执行更复杂的查询计划。当然,如果您确实遇到了性能问题,那么就该进行调查了。但是您可以科学地做到这一点,即通过使用执行计划来衡量不同选项的性能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从一个表中选择数据,然后插入到该表中不存在的另一个现有表中

来自分类Dev

SQL从一个表中选择两列,再从另一表中的列转换

来自分类Dev

从一个表中选择另一个不存在的表

来自分类Dev

如何在一个表中选择多行,而在另一表中只选择一行?

来自分类Dev

MySQL-从一个表中选择多行,其ID存储在另一表中

来自分类Dev

从一个表中选择记录,并使用另一表中的列对结果进行排序

来自分类Dev

Left Join / IS NULL如何消除一个表中存在而不是另一表中的记录?

来自分类Dev

如何从一个表中查找另一表中不存在的数据?

来自分类Dev

从一个表中选择与客户或另一表中的“ Customers”子项相关联的票证记录

来自分类Dev

如何从一个表中选择一个值,而在另一个表中满足两个单独的条件对

来自分类Dev

如何在SQLITE中从一个表中获取所有列,并从另一表中获取一个列

来自分类Dev

SQL查找某些表中存在而另一表中不存在的数据

来自分类Dev

如何从一个表中选择某项,而另一表中不存在某个字段

来自分类Dev

SQL:一个表中的所有记录,以及另一表中的所有记录,包括null

来自分类Dev

从存在ID(从另一表)的一个表中选择

来自分类Dev

如何从一个表中选择项目,以使另一表中的查询恰好产生一行?

来自分类Dev

从一个表中选择并按另一表的列排序

来自分类Dev

SQL如何从另一个表中不存在的表中选择

来自分类Dev

SQLite查询选择另一个表中不存在的所有记录

来自分类Dev

从一个列中连接多个值,该列从另一表中选择

来自分类Dev

从一个表中选择记录,这些记录在另一个表中不存在

来自分类Dev

SQL查询从一个表中选择不在另一表中的行

来自分类Dev

从一个表中选择所有记录并从另一个表中匹配记录

来自分类Dev

如果某行在另一表中不存在,则 MySQL 有条件地插入到一个表

来自分类Dev

从一个表中选择所有条目,该表在另一表中有两个特定条目

来自分类Dev

使用 Linq 从一个表中检索不在另一表中的所有项目

来自分类Dev

如何从一个表中选择另一个表中不存在的所有记录,但在不存在的记录中返回NULL

来自分类Dev

如何在cakephp 3.6中从一个表中选择所有记录并从另一个表中选择一些记录

来自分类Dev

计算一个表中与另一表中条件匹配的记录

Related 相关文章

  1. 1

    从一个表中选择数据,然后插入到该表中不存在的另一个现有表中

  2. 2

    SQL从一个表中选择两列,再从另一表中的列转换

  3. 3

    从一个表中选择另一个不存在的表

  4. 4

    如何在一个表中选择多行,而在另一表中只选择一行?

  5. 5

    MySQL-从一个表中选择多行,其ID存储在另一表中

  6. 6

    从一个表中选择记录,并使用另一表中的列对结果进行排序

  7. 7

    Left Join / IS NULL如何消除一个表中存在而不是另一表中的记录?

  8. 8

    如何从一个表中查找另一表中不存在的数据?

  9. 9

    从一个表中选择与客户或另一表中的“ Customers”子项相关联的票证记录

  10. 10

    如何从一个表中选择一个值,而在另一个表中满足两个单独的条件对

  11. 11

    如何在SQLITE中从一个表中获取所有列,并从另一表中获取一个列

  12. 12

    SQL查找某些表中存在而另一表中不存在的数据

  13. 13

    如何从一个表中选择某项,而另一表中不存在某个字段

  14. 14

    SQL:一个表中的所有记录,以及另一表中的所有记录,包括null

  15. 15

    从存在ID(从另一表)的一个表中选择

  16. 16

    如何从一个表中选择项目,以使另一表中的查询恰好产生一行?

  17. 17

    从一个表中选择并按另一表的列排序

  18. 18

    SQL如何从另一个表中不存在的表中选择

  19. 19

    SQLite查询选择另一个表中不存在的所有记录

  20. 20

    从一个列中连接多个值,该列从另一表中选择

  21. 21

    从一个表中选择记录,这些记录在另一个表中不存在

  22. 22

    SQL查询从一个表中选择不在另一表中的行

  23. 23

    从一个表中选择所有记录并从另一个表中匹配记录

  24. 24

    如果某行在另一表中不存在,则 MySQL 有条件地插入到一个表

  25. 25

    从一个表中选择所有条目,该表在另一表中有两个特定条目

  26. 26

    使用 Linq 从一个表中检索不在另一表中的所有项目

  27. 27

    如何从一个表中选择另一个表中不存在的所有记录,但在不存在的记录中返回NULL

  28. 28

    如何在cakephp 3.6中从一个表中选择所有记录并从另一个表中选择一些记录

  29. 29

    计算一个表中与另一表中条件匹配的记录

热门标签

归档