gpt4 book ai didi

c# - 如何从表中选择所有 SQL 行(具有两列的唯一组合),其中相同的组合不在另一个表中

转载 作者:行者123 更新时间:2023-11-30 22:20:14 25 4
gpt4 key购买 nike

我很难准确地表达我的问题所在,但我会尽力而为。我在 Visual Studio 中使用 C#,连接到 SQL 数据库。

我有一个旧书店数据库,卖家可以进来把他们的书给我们,让我们为他们销售。关键表有3个:

  • 图书(包含我们出售的 10 本书,每本书都有一个唯一的 ISBN 标识该书)
  • 已售出(所有已售出的图书,由图书的 ISBN 和原始卖家的 ID [称为 SSBID] 标识)
  • 复制(数据库中曾经存在的所有图书,包括已售出的图书。由相同的 ISBN 和卖家 ID [称为 SSID] 标识)

我们可以假设原始卖家绝不会将同一本书出售两次。

当顾客来买书时,店员会通过两个下拉列表来查找每本书。第一个 DDL 填充了系统中有一本书的每个 ISBN,如下所示。 (如果不存在,则无需列出 ISBN!)

SELECT DISTINCT [ISBN] FROM [Copy] ORDER BY [ISBN]

第二个下拉列表应该填充每个销售具有相同 ISBN 图书的卖家的卖家 ID。但是,我们不想列出任何已售出图书的卖家 ID。下面是对我来说最有意义的 select 语句,但我不认为逻辑是完美的。

SELECT [SSID] FROM [Copy] WHERE (SSID, ISBN NOT IN (SELECT SSBID, ISBN FROM Sold)) AND ([ISBN] = @ISBN) ORDER BY [SSID]

因此,我们不想在 Copy 和 Sold 中提取任何具有相同唯一 SSID 和 ISBN 组合的记录,同时只显示与我们已经选择的 ISBN 相对应的记录。

第二个查询应该是什么样的?SSID 和 SSBID 名称不同会影响查询功能吗?

为清楚起见,这里是 Copy 和 Sold 的粗略布局:

复制

- SSID_______ISBN
- 115________019
- 115________528
- 123________528
- 503________019

已售出

- SSBID_____ISBN
- 115_______019

所以在我的第一个下拉列表中选择“115”后,第二个下拉列表应该只填充“528”。

最佳答案

如果我理解正确,你想在 ISBN 上加入 SoldCopy,除非 Sold< 中都有记录 Copy 匹配ISBN SSID。我可能离得很远,但也许这会有所帮助。

SELECT b.ISBN, b.SSID
FROM
Books b
JOIN Sold s on b.ISBN = s.ISBN
JOIN Copy c on b.ISBN = c.ISBN
LEFT JOIN Sold s2 on b.ISBN = s2.ISBN and b.SSID = s2.SSID
LEFT JOIN Copy c2 on b.ISBN = c2.ISBN and b.SSID = c2.SSID
WHERE s2.ISBN is null or c2.ISBN is null

这将加入 ISBN 上的 SoldCopy,但排除 Books 匹配两者的记录两个领域的表格。

关于c# - 如何从表中选择所有 SQL 行(具有两列的唯一组合),其中相同的组合不在另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36829790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com