Tempo interrogativo stupido. Oracle 10g.Dove clausola che riguarda join
È possibile che una clausola where influenzi un join?
Ho una domanda in forma di:
select * from
(select product, product_name from products p
join product_serial ps on product.id = ps.id
join product_data pd on pd.product_value = to_number(p.product_value)) product_result
where product_name like '%prototype%';
Ovviamente questo è un esempio inventato. Nessun reale bisogno di mostrare la struttura del tavolo perché è tutto immaginario. Sfortunatamente, non posso mostrare la struttura o la query reale della tabella. In questo caso, p.product_value è un campo VARCHAR2 che in alcune righe ha un ID memorizzato al suo interno anziché il testo. (Sì, design errato, ma qualcosa che ho ereditato e non riesco a modificare)
Il problema è nell'unione. Se ometto la clausola where, la query funziona e vengono restituite le righe. Tuttavia, se aggiungo la clausola where, ottengo l'errore "numero non valido" sulla condizione di join pd.product_value = to_number (p.product_value).
Ovviamente, l'errore "numero non valido" si verifica quando le righe vengono unite che contengono non cifre nel campo p.product_value. Tuttavia, la mia domanda è come sono selezionate quelle file? Se il join ha esito positivo senza la clausola outer where, la clausola outer where non deve selezionare solo le righe dal risultato del join? Appare ciò che sta accadendo è la clausola where sta influenzando quali righe sono unite, nonostante il join sia in una query interna.
La mia domanda ha senso?
Si potrebbe dare un po 'di spazio 'to_char (pd.product_value) = p.product_value'. – briantyler