我正在創建一個查詢生成器,以便將業務規則轉換爲針對Oracle數據庫運行的SQL查詢。規則基本上是「所有符合這些標準的項目都應與符合這些標準的項目相關」。太多的思考和深思熟慮之後,我決定,要做到這一點,最好的方法是使用SQL加盟兩組:Oracle - 此查詢是否可以簡化或重新組織?
- 該組匹配的FROM標準(A)的所有項目的
- 套所有的與符合TO標準的項目相匹配的項目(B)
B必須是A的子集。我將確定是否通過從A中減去B並期望空集。如果該集合不爲空,則不符合規則。
「SQL連接」有很多Google圖像搜索結果,顯示如何使用不同類型的連接語句表示各種集合關係,如this image。一個我想與去(爲A - B)將是對左側中間的一個:
select A.id
from items A
left join items B
on A.id = B.id
where B.id = null
顯然,我的查詢比這複雜得多。我一直這樣做的方式是讓B成爲子查詢。我還必須包含關係表,然後添加條件。由此產生的模板:
select A.id
from items A
left join (
select A.id
from items A
join relationships rel
on rel.from_item = A.id
join items to
on rel.to_item = to.id
where [from criteria]
and [to criteria]
) B
on A.id = B.id
join relationships rel
on rel.from_item = A.id
where B.id = null
and [from criteria]
有沒有更好的方法,在語法上,我執行我正在執行的查詢?
我想象一下,我可以構造查詢A像某個臨時表一樣,然後從查詢A構造查詢B,然後讓一個最終查詢將它們連接在一起並返回結果。那可能嗎?
這正是我所期待的。謝謝! – jchitel