我在说出我的问题的确切位置时遇到了一些困难,但是我会尽力而为。我正在Visual Studio中使用C#,连接到SQL数据库。
我有一个二手书店数据库,卖家可以在其中输入书籍,然后将书交给我们卖给他们。有三个关键表:
我们可以假设原始卖方永远不会两次出售同一本书。
当客户来购买一本书时,业务员将通过两个下拉列表查找每本书。第一个DDL填充了系统中每个带有书的ISBN,如下所示。(如果它不存在,则无需列出ISBN!)
SELECT DISTINCT [ISBN] FROM [Copy] ORDER BY [ISBN]
第二个下拉列表应该填充每个正在出售具有相同ISBN的图书的卖家的卖家ID。但是,我们不想列出已售出的任何书籍的卖方ID。下面是对我来说最有意义的选择语句,但我认为逻辑并不完美。
SELECT [SSID] FROM [Copy] WHERE (SSID, ISBN NOT IN (SELECT SSBID, ISBN FROM Sold)) AND ([ISBN] = @ISBN) ORDER BY [SSID]
因此,我们不希望在“复制”和“出售”中提取具有SSID和ISBN相同唯一组合的任何记录,而同时仅显示与我们已经选择的ISBN对应的记录。
第二个查询应该是什么样子?SSID和SSBID具有不同名称的事实会影响查询的功能吗?
为了清楚起见,这是“复制”和“出售”的粗略布局:
复制
- SSID_______ISBN
- 115________019
- 115________528
- 123________528
- 503________019
卖
- SSBID_____ISBN
- 115_______019
因此,在我的第一个下拉列表中选择“ 115”后,第二个下拉列表应仅填充“ 528”。
如果我理解正确的话,你想加入这两个Sold
和Copy
上ISBN
除非有两个记录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
这是打算加入到这两个Sold
和Copy
的ISBN
,但不包括其中的记录Books
在这两个领域都表匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句