我最近問這個問題,有點爲難,所以我想請問專家...SQL語句返回非交叉記錄
鑑於兩個表& B,我要回所有的值從A和B不重疊。想想兩個重疊的圓圈;我們如何返回不在重疊中心部分的所有數據?而且,我必須使用ANSI標準SQL而不是Oracle語法。
假設我們希望一切獨家既是& B,我的回答是
select *
from A
cross join B
minus
(select a.common_column from a
intersect
select b.common_column)
這是否看起來是正確的,甚至接近?如果這是正確的,是否有更有效的方法來做到這一點?
順便說一句 - 我的解決方案被完全拒絕....
謝謝!
看起來很接近。我會用'union all'來代替外部查詢的交叉連接。 –
你爲什麼要進行交叉連接?這將創建A和B的笛卡爾積。假設A和B包含多個列,此查詢將不會編譯(因爲交叉連接B返回NxM列,而第二部分返回1列)。 –
是的,你不需要'交叉連接'....要麼在'intersect'上做'union all',然後'except',要麼在'select col'上做一個'union all'除了從B'中選擇col和'從B中選擇列外,除了從A中選擇col' – 2017-02-10 18:45:11