gpt4 book ai didi

Oracle 自然连接和计数 (1)

转载 作者:行者123 更新时间:2023-12-04 22:17:52 25 4
gpt4 key购买 nike

有谁知道为什么在 Oracle 11g 中,当您执行具有多个自然连接的 Count(1) 时,它会执行笛卡尔连接并抛出计数方式?


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

这会拉回 300 万行,当
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 时它就成了问题。

最佳答案

我的建议是不要使用 NATURAL JOIN。明确定义您的连接条件以避免混淆和“隐藏的错误”。这是关于这个主题的 official NATURAL JOIN Oracle documentationmore discussion

关于Oracle 自然连接和计数 (1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/103389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com