Esiste una funzione o un operatore o comunque un semplice (r) costrutto per ottenere l'intersezione di due letterali tupla in Oracle sql?Oracle SQL: Interseca tuple letterali
Prendendo in considerazione il seguente esempio:
Avere la seguente tabella
------------------------------
TABLE sometable
------------------------------
id | telephone | mobile | fax
------------------------------
1 | 123 | 456 | 789
Dato un elenco di numeri di n {n1, n2, n3, ..., n} Cercare un ID , tale che:
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
Due soluzioni plausibili sono:
1. Soluzione 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. Soluzione 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)
;
è tuttavia esiste una funzione/operatore per effettuare le seguenti?
SELECT id
FROM sometable
WHERE
intersect_function
(
(telephone, mobile, fax),
(n1, n2, n3, ..., n)
)
= TRUE
;
Un'alternativa, semplice costrutto Sarebbe auspicabile, tenendo conto che questa condizione è parte di una query più numerosi e possibilmente più condizioni più complesse.
Grazie.
'select REGEXP_SUBSTR ('123, 456', '\ d +', 1, livello) n da doppio connettersi REGEXP_INSTR ('123, 456', '\ d +', 1, livello)! = 0 ' è molto utile. una volta rotto in un tavolo le possibilità sono numerose. una cosa interessante che ho notato è il costo della query sembra fisso mentre le soluzioni 1 e 2 i costi sono gli stessi e tendono a variare. – fluxy