Oracle sql'de iki tuple literalinin kesişimini elde etmek için bir işlev veya operatör veya başka bir basit (r) yapı var mı? n numaralar {n1, n2, n3, ..., n} bulmak id listesi göz önüne alındığında aşağıdaki tabloOracle SQL: Kesişen kümeleri için
------------------------------
TABLE sometable
------------------------------
id | telephone | mobile | fax
------------------------------
1 | 123 | 456 | 789
sahip
: dikkate aşağıdaki örneği alarak
, öyle ki:
telephone = n1 or mobile = n1 or fax = n1
or telephone = n2 or mobile = n2 or fax = n2
or telephone = n3 or mobile = n3 or fax = n3
....
or telephone = n or mobile = n or fax = n
iki olası çözümler şunlardır:
1. Çözüm 1
SELECT id FROM sometable
WHERE
n1 IN (telephone, mobile, fax)
OR n2 IN (telephone, mobile, fax)
OR n3 IN (telephone, mobile, fax)
....
OR n IN (telephone, mobile, fax)
;
2. Çözüm 2
SELECT id FROM sometable
WHERE
telephone IN (n1, n2, n3, ..., n)
OR mobile IN (n1, n2, n3, ..., n)
OR fax IN (n1, n2, n3, ..., n)
;
Ancak aşağıdakileri yapmak için bir işlev/operatör var mı?
SELECT id
FROM sometable
WHERE
intersect_function
(
(telephone, mobile, fax),
(n1, n2, n3, ..., n)
)
= TRUE
;
alternatif, daha basit yapı bu durum daha çok sayıda ve büyük olasılıkla daha karmaşık koşullar ile daha uzun sorgunun parçası olduğunu dikkate alarak, memnuniyetle karşılanacaktır.
Teşekkürler. Tek bir satırdan, oluşturabileceğiniz biraz regexp'in hile ile Ardından
değer başına bir satır ve masanıza karşı onları maç:
'seçeneğini regexp_substr ('123, 456', '\ d +', 1, seviye) n çift den regexp_instr bağlanmak ('123, 456', '\ d +', 1, seviye)! = 0' çok faydalıdır. Bir masaya böldükten sonra olasılıklar çoktur. Fark ettiğim ilginç bir şey, sorgunun maliyetinin sabit kalması iken, 1 ve 2 numaralı çözümlerin maliyetleri aynıdır ve değişme eğilimindedir. – fluxy