Oracle Natural tritt bei und zählt (1)
Weiß jemand, warum in Oracle 11g, wenn Sie eine Zählung (1) mit mehr als einer natürlichen Verknüpfung durchführen, eine kartesische Verknüpfung ausgeführt und die Zählung abgebrochen wird?
Sowie
<code>SELECT Count(1) FROM record NATURAL join address NATURAL join person WHERE status=1 AND code = 1 AND state = 'TN' </code>
Dies zieht sich wie 3 Millionen Zeilen zurück, wenn
<code>SELECT * FROM record NATURAL join address NATURAL join person WHERE status=1 AND code = 1 AND state = 'TN' </code>
zieht sich wie 36000 Zeilen zurück, was der richtigen Menge entspricht.
Vermisse ich nur etwas?
Hier sind die Tabellen, die ich verwende, um dieses Ergebnis zu erhalten.
<code>CREATE TABLE addresses ( address_id NUMBER(10,0) NOT NULL, address_1 VARCHAR2(60) NULL, address_2 VARCHAR2(60) NULL, city VARCHAR2(35) NULL, state CHAR(2) NULL, zip VARCHAR2(5) NULL, zip_4 VARCHAR2(4) NULL, county VARCHAR2(35) NULL, phone VARCHAR2(11) NULL, fax VARCHAR2(11) NULL, origin_network NUMBER(3,0) NOT NULL, owner_network NUMBER(3,0) NOT NULL, corrected_address_id NUMBER(10,0) NULL, "HASH" VARCHAR2(200) NULL ); CREATE TABLE rates ( rate_id NUMBER(10,0) NOT NULL, eob VARCHAR2(30) NOT NULL, network_code NUMBER(3,0) NOT NULL, product_code VARCHAR2(2) NOT NULL, rate_type NUMBER(1,0) NOT NULL ); CREATE TABLE records ( pk_unique_id NUMBER(10,0) NOT NULL, rate_id NUMBER(10,0) NOT NULL, address_id NUMBER(10,0) NOT NULL, effective_date DATE NOT NULL, term_date DATE NULL, last_update DATE NULL, status CHAR(1) NOT NULL, network_unique_id VARCHAR2(20) NULL, rate_id_2 NUMBER(10,0) NULL, contracted_by VARCHAR2(50) NULL, contract_version VARCHAR2(5) NULL, bill_address_id NUMBER(10,0) NULL ); </code>
Ich sollte erwähnen, dass dies in Oracle 9i kein Problem war, aber als wir auf 11g umgestiegen sind, wurde es zu einem Problem.