Вопрос по – Oracle Natural Joins and Count (1)

4

Кто-нибудь знает, почему в Oracle 11g, когда вы выполняете Count (1) с более чем одним естественным соединением, оно выполняет декартово соединение и сбрасывает счет?

Такие как

SELECT Count(1) FROM record NATURAL join address NATURAL join person WHERE status=1
AND code = 1 AND state = 'TN'

Это отступает, как 3 миллиона строк, когда

SELECT * FROM record NATURAL join address NATURAL join person WHERE status=1
AND code = 1 AND state = 'TN'

тянет назад, как 36000 строк, что является правильным количеством.

Я что-то пропустил?

Вот таблицы, которые я использую для получения этого результата.

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
);

Я должен упомянуть, что это не было проблемой в Oracle 9i, но когда мы переключились на 11g, это стало проблемой.

Опишите эти таблицы. Получаете ли вы те же результаты, если явно указываете внутреннее соединение? Apocalisp

Ваш Ответ

4   ответа
1

Вы должны попробовать считать (*)

Между ними есть разница.
count (1) обозначает количество строк, где 1 не нуль
count (*) означает считать строки

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededasktom.oracle.com/pls/asktom/…
2

must быть ошибкой оптимизатора, вы должны сообщить об этом в Oracle.

1

Из документации вы можете использовать только естественное соединение на 2 таблицы Natural_Join

Error: User Rate Limit Exceeded68.142.116.68/docs/cd/B19306_01/server.102/b14200/…
9

ите условия соединения, чтобы избежать путаницы и «скрытых ошибок». Здесьофициальная документация Oracle NATURAL JOIN а такжебольше обсуждения об этой теме.

Error: User Rate Limit Exceededgist.github.com/72614Error: User Rate Limit Exceeded

Похожие вопросы