![](/img/trans.png)
[英]Select unique/distinct combination of values from IEnumerable of same type
[英]How to select all the SQL rows from a table (With a unique combination of two columns) where the same combination is not already in another table
我有一點困難,我正在准確地說出我的問題,但我會盡我所能。 我在Visual Studio中使用C#,連接到SQL數據庫。
我有一個二手書店數據庫,賣家可以進來給我們出售給他們的書。 有三個關鍵表:
我們可以假設原始賣家絕不會兩次出售同一本書。
當顧客來購買書籍時,店員將通過兩個下拉列表查找每本書。 第一個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”。
如果我理解正確,您希望加入ISBN
上的Sold
和Copy
,除非在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
這Copy
在ISBN
上加入Sold
和Copy
,但排除Books
與兩個字段上的兩個表匹配的記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.