Dumb Fragestunde. Oracle 10g.Where-Klausel, die den Join betrifft
Kann eine where-Klausel einen Join beeinflussen?
Ich habe eine Abfrage in Form bekommt:
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%';
Offensichtlich ist dies ein konstruiertes Beispiel ist. Keine wirkliche Notwendigkeit, die Tabellenstruktur zu zeigen, da alles imaginär ist. Leider kann ich die tatsächliche Tabellenstruktur oder Abfrage nicht anzeigen. In diesem Fall ist p.product_value ein VARCHAR2-Feld, in dem in bestimmten Zeilen eine ID gespeichert ist und nicht Text. (Ja, schlechtes Design - aber etwas, das ich geerbt habe und nicht ändern kann)
Das Problem ist in der Join. Wenn ich die where-Klausel weglasse, funktioniert die Abfrage und Zeilen werden zurückgegeben. Wenn ich jedoch die WHERE-Klausel hinzufüge, erhalte ich den Fehler "ungültige Zahl" in der Join-Bedingung pd.product_value = to_number (p.product_value).
Offensichtlich tritt der Fehler "ungültige Zahl" auf, wenn Zeilen verbunden werden, die Nicht-Ziffern im Feld p.product_value enthalten. Meine Frage ist jedoch, wie werden diese Zeilen ausgewählt? Wenn der Join ohne die äußere WHERE-Klausel erfolgreich ist, sollte nicht die äußere WHERE-Klausel nur Zeilen aus dem Ergebnis des Joins auswählen? Es scheint, dass die WHERE-Klausel Auswirkungen darauf hat, welche Zeilen verbunden sind, obwohl die Verknüpfung in einer inneren Abfrage enthalten ist.
Ist meine Frage sinnvoll?
Sie könnten es ein wenig locker geben 'to_char (pd.product_value) = p.product_value'. – briantyler