[英]Comparing Parent-child combination from 2 different tables in SQL Server
我有表MAT_ITEM
和數據如下
+--------+-------+
| MAT_NO | CHILD |
+--------+-------+
| 9856 | 874 |
| 9856 | 856 |
| 9856 | 548 |
| 9883 | 596 |
| 9883 | 356 |
| 7845 | 101 |
| 7845 | 908 |
| 7845 | 206 |
+--------+-------+
另一個表MAT_REL
和數據如下:
+--------+----------+----------+
| MAT_NO | PARENT | CHILD |
+--------+----------+----------+
| 9856 | | STEEL |
| 9856 | STEEL | 874 |
| 9856 | STEEL | 856 |
| 9856 | STEEL | 548 |
| 9856 | A-STEEL | 874 |
| 9856 | B_STEEL | 856 |
| 7845 | | METAL |
| 7845 | O_METAL | 102 |
| 7845 | I_METAL | 908 |
| 7845 | METAL | 102 |
| 7845 | METAL | 908 |
| 7845 | METAL | 206 |
| 7845 | METAL | 769 |
| 9883 | | CARBON |
| 9883 | B_CARBON | 596 |
| 9883 | C_CARBON | 356 |
| 9883 | CARBON | 596 |
| 9883 | CARBON | 147 |
+--------+----------+----------+
基本上, MAT_REL
具有空PARENT
的行被視為 TOP Parent 並且它的孩子將被視為PARENT
以供我在MAT_REL
進行比較。 MAT_REL
也可能包含 Parent 作為其他值(例如,A_STEEL、B_CARBON 等),我並不擔心。 我正在考慮比較MAT_REL
類似內容。
+--------+--------+-------+
| MAT_NO | PARENT | CHILD |
+--------+--------+-------+
| 9856 | STEEL | 874 |
| 9856 | STEEL | 856 |
| 9856 | STEEL | 548 |
| 9883 | CARBON | 596 |
| 9883 | CARBON | 147 |
| 7845 | METAL | 102 |
| 7845 | METAL | 908 |
| 7845 | METAL | 206 |
| 7845 | METAL | 769 |
+--------+--------+-------+
現在我想比較MAT_ITEM
和MAT_REL
是否MAT_ITEM
組合中的MAT_NO & CHILD
與MAT_NO
、 PARENT
& CHILD
在MAT_REL
相同。 MAT_REL
正在嘗試獲取不匹配的行。 我們不能直接比較MAT_ITEM
和MAT_REL
直接比較將不起作用,因為如果你看到 MAT_NO 9883 ,直接比較可能會給出結果,因為行是相同的,但我們必須檢查 CARBON 而不是其他(B_CARBON)作為整體
預期輸出:(有或沒有孩子)
9883
7845
我能夠獲得單個 MAT_NO 的詳細信息。
SELECT * FROM MAT_ITEM WHERE MAT_NO='7845'
SELECT * FROM MAT_REL
WHERE MAT_NO = '7845' AND PARENT IS NULL -- METAL (using this below)
SELECT * FROM MAT_REL
WHERE MAT_NO = '7845' AND PARENT = 'METAL'
SELECT DISTINCT CHILD FROM MAT_ITEM WHERE MAT_NO = '7845'
EXCEPT
SELECT DISTINCT CHILD FROM MAT_REL
WHERE MAT_NO = '7845' AND PARENT = 'METAL' -- will return some rows --101
但不確定如何處理整套組合。
根據對問題的評論回答。 我在 SQLite 數據庫上進行了嘗試,由於與 SQLServer 相比語法可能有所不同,因此我只能給您指示。 我沒有到數據庫的鏈接。
尋找基礎:
查找不匹配(比較 child=child 和 mat_no=mat_no):
找到 3 和 4:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.