程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 集合成員和關系

集合成員和關系

編輯:關於SqlServer

為了介紹我在本文中討論的問題,首先我們來回顧一下集合論中表示集合之間關系的幾個概念。我使用這些概念來為本文所討論的問題定義條件。我用大寫字母指定集合名稱,用編號的小寫字母指定集合成員,用裡面包含集合成員的花括號指定集合本身。

集合論描述了集合之間可以存在的某些關系:

集合 U 等於集合 V,條件是:U 的所有成員都存在於 V 中,並且 V 的所有成員都存在於 U 中 - 例如,U = {u1, u2, u3},V = {u1, u2, u3}。

如果 U 的所有成員都存在於 V 中,則 U 是 V 的子集。當 U 等於 V 時,U 是 V 的子集,V 也是 U 的子集。

當 U 是 V 的子集,但 V 不是 U 的子集時,U 是 V 的真子集 - 例如,U = {u1, u2, u3},V = {u1, u2, u3, u4}。

我在本文中討論的任務涉及到確定與另一個項組有某種關系的項組,也就是集合。我們先來看一個提出問題的示例。

Orders OrderDetails 方案

我使用的方案涉及到作為示例的 Orders 表和 OrderDetails 表,您可以運行 sqlmag03/Html/SetMembersandRelationshipsListing_01.txt" target="_blank">清單 1顯示的腳本在 tempdb 中創建並填充這兩個表。這些表只包括了與本文討論內容相關的列 - 即,Orders 中的 orderid 列和 OrderDetails 中的 orderid 和 productid 列。Orders 表中的每個訂單在 OrderDetails 表中可能不存在相關行;或存在一個或多個相關行,每一行都包含不同的產品。就其本質來說,每個定單都是實體的一個實例,但在本文中,我所指的定單是屬於定單的一組詳細信息。

應用程序用戶輸入一組代表新定單的產品,您的代碼將它們存儲在 #ProdList 臨時表中:

CREATE TABLE #ProdList(productid int NOT NULL PRIMARY KEY)



INSERT INTO #ProdList VALUES(2)



INSERT INTO #ProdList VALUES(3)



INSERT INTO #ProdList VALUES(4)



您從市場營銷部門接受了幾個任務,要求您確定新定單和現有定單之間的不同關系。這些關系對於市場營銷部門可能很重要,營銷部門會據此確定采購模式,考慮某些產品組的折扣,等等。

任務 1P O 的子集。您的第一個任務是確定包含 #ProdList 中的所有產品的定單。用集合術語來說,如果 O 代表構成定單的定單詳細信息的集合,P 代表 #ProdList 中的產品的集合,您就要查找滿足“P 是 O 的子集”這一條件的定單。您的查詢應該返回定單 A 和 B。

下面的查詢為您提供了該任務的解決方案:

SELECT orderid



FROM OrderDetails



WHERE productid IN(SELECT productid FROM #ProdList)



GROUP BY orderid
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved