我的表結構大致如下(有多個列,我離開了)檢查沒有主鍵的多個記錄中的不同
WEAPON MUNITION RANGE
我正在寫一個查詢,以檢查一個表有許多WEAPON-MUNITION對具有不同的範圍。我需要找到每個實例的WEAPON-MUNITION有不同的範圍。允許複製,因爲此表中有多個數據集。是的,它違反規範化,但我沒有做到,我只需要查詢它。
所以說我有四個不同範圍的武器彈藥列隊,我需要能夠顯示他們,以便他們可以糾正。我已經嘗試了一些複雜的CTE,並且真正令人費解的自加入,但是當我認爲我有結果時,我無法將其與原始表綁定,因爲我認爲這是一個主鍵,在數據集之間存在重複!在找到上述記錄後,我需要顯示整個記錄。我最初幾乎是我開始的行的10倍,我無法弄清楚爲什麼。
缺少要求DBA允許我爲每條記錄生成唯一密鑰的問題我不知道我該如何實現這一點。
編輯 使用我想出了這個查詢gregmac的例子(一般,留下了一些列的任何專有信息)
WITH range_cte AS
(
SELECT
d1.WEAPON
,d1.MUNITION
,d1.WEAPON
,d1.RANGE
,d1.ID --This is NOT a primary key! There are duplicates
FROM data1 d1 INNER JOIN data2 d2
ON d1.WEAPON = d2.WEAPON
AND d1.MUNITION = d2.MUNITION
AND d1.RANGE <> d2.RANGE
GROUP BY
d1.WEAPON
,d1.MUNITION
,d1.WEAPON
,d1.RANGE
,d1.ID
ORDER BY
d1.WEAPON
,d1.MUNITION
)
--Self join the CTE on the original table using the ID (that's not a primary key)
SELECT * FROM range_cte r INNER JOIN data d
ON r.ID = d.ID
我的想法是插入一個自動生成的密鑰對整個或者是否應該在CTE中包含更多列(如數據集)以形成某種自然鍵?
或許,如果你有一個查詢你已經嘗試過了,還有一個說明如果結果出了問題,我們可以更好地瞭解你想要做的事情。 – GilM
我需要和我的主管覈對一下。我寫的所有代碼都是FOUO(僅供官方使用)。如果我犯了一個錯誤,併發布一些我不應該公開的東西,我可能會失去我的工作。 我會試着想出一個我已經寫過並由老闆運行它的通用示例。 – OpsResearch36
我添加了一個例子。我希望這有助於澄清我爲什麼要嘗試去做。 – OpsResearch36