通过自然连接实现跨越式发展

时间:2016-04-20 22:01:11

标签: sql oracle join

我有以下设置:

three tables with commonalities

我想要做的是从表A中属于类别1的表C中提取名称(即,我已经突出显示的内容),并且我需要仅使用自然联接来执行此操作。 / p>

我认为这样可行,但事实并非如此:

SELECT First, Last FROM TableC NATURAL JOIN TableB, TableA WHERE TableA.Category=1

它为我提供了与表A和B相关的所有名字和姓氏。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您正在混合ANSI和旧式连接,这是一个坏主意,并且您最终在两个表之间没有连接条件。你正在C和B之间创建一个自然的连接,但是然后在它的结果和A之间有一个交叉连接(但是在旧的语法中)。如果它完全起作用并且没有给出一个shntax错误,它将给出错误的结果。

始终使用ANSI连接;你需要指定两者都是自然连接:

GetComponent<Rigidbody2D>().transform.position += Vector3.up * speed * Time.deltaTime;

使用您的数据设置:

SELECT First, Last
FROM TableA
NATURAL JOIN TableB
NATURAL JOIN TableC
WHERE TableA.Category=1

这会得到你想要的结果:

create table tablea (category number, pin number);
insert into tablea values(1, 101);
insert into tablea values(2, 102);
insert into tablea values(1, 103);
insert into tablea values(3, 104);
insert into tablea values(1, 105);
insert into tablea values(3, 106);

create table tableb (pin number, login number);
insert into tableb values(101, 201);
insert into tableb values(102, 202);
insert into tableb values(103, 203);
insert into tableb values(104, 204);
insert into tableb values(105, 205);
insert into tableb values(106, 206);

create table tablec (login number, first varchar2(20), last varchar2(20));
insert into tablec values(201, 'Joe', 'English');
insert into tablec values(202, 'Alan', 'Smith');
insert into tablec values(203, 'Lucy', 'Parker');
insert into tablec values(204, 'Brad', 'Finch');
insert into tablec values(205, 'Kate', 'Young');
insert into tablec values(206, 'Rachel', 'Turville');

答案 1 :(得分:0)

如果您想使用其他联接执行。检查这可能会给你所需的结果:

 SELECT First, Last FROM TableA JOIN TableB on (TableA.Category=1 and TableA.Pin=TableB.Pin) JOIN TableC on TableB.Login=TableC.Login