【发布时间】:2016-08-18 04:58:57
【问题描述】:
我很难准确地说出我的问题是什么,但我会尽力而为。我在 Visual Studio 中使用 C#,连接到 SQL 数据库。
我有一个二手书店数据库,卖家可以进来,将他们的书交给我们为他们出售。共有三个关键表:
- 图书(包含我们销售的 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 名称不同会影响查询的功能吗?
为清楚起见,这里是复制和销售的粗略布局:
复制
- SSID_______ISBN
- 115________019
- 115________528
- 123________528
- 503________019
已售出
- SSBID_____ISBN
- 115_______019
所以在我的第一个下拉菜单中选择“115”后,第二个下拉菜单应该只填充“528”。
【问题讨论】: