0

我正在尝试检索具有子变量的表中的所有行,其中这些行的外键等于具有父变量的表中行的主键。

从图形上看,它看起来像这样:

表 1. 此表包含父行。

ID  |  variable  |  variable  |  etc.
1   |  XX        |  BB        |  ...
2   |  YY        |  AA        |  ...

表 2. 此表包含子行。

ID  |  FK (parent)  |  variable  |  etc.
1   |  1            |  BB        |  ...
2   |  1            |  AA        |  ...
3   |  1            |  AA        |  ...
4   |  2            |  AA        |  ...
5   |  3            |  AA        |  ...

我显然不是 SQL 专家,我通常会用另一种编程语言编写一个循环,循环遍历父表中的每一行,然后检查子表是否匹配。但是,我不知道这里最有效的方法是什么。父表将有 50 多行。children 表有 8000+ 行。

更新:我想将子表中的相关数据转储到新表中。所以我不想要一个包含来自父表和子表的数据的组合表,这就是我认为的 JOIN 。

更新2:我设法得到了我想要的东西:

INSERT INTO NewTable 
select columns
from ChildrenTable t
    inner join ParentTable p
        on t.parentId = p.Id

谢谢您的帮助!

4

4 回答 4

1

你可以这样试试——

Select * from table1 left join table2 on table1.id = table2.fk
于 2013-01-07T11:00:35.733 回答
0

您可以尝试使用:

select * from table2, table1 where table2.fk = table1.id
于 2013-01-07T11:02:55.623 回答
0

select * from child_table_name 作为 tblchild,parent_table_name 作为 tblparent,其中 tblchild.fk_column_name=tblparent.id

于 2013-01-07T11:03:50.283 回答
0

你写了:

我想将子表中的相关数据转储到新表中。所以我不想要一个包含来自父表和子表的数据的组合表,这就是我认为的 JOIN 。

Well JOIN 只是结合了来自所选表的两个或多个相关数据。我的意思是你可以选择你想要的任何列,即如果你有这样的表(从你的原始表中更新了一些列):

父表

ID  |  variable1  |  variable2  |  etc.
1   |  XX         |  BB         |  ...
2   |  YY         |  AA         |  ...

子表

ID  |  FK-ID        |  variable  |  etc.
1   |  1            |  BB        |  ...
2   |  1            |  AA        |  ...
3   |  1            |  AA        |  ...
4   |  2            |  AA        |  ...
5   |  3            |  AA        |  ...

并且您只想从第一个表中检索 ID,从第一个表中检索变量 2,从第二个表中检索变量,您将编写

SELECT ID.parent-table, variable2.parent-table, variable.child-table
FROM parent-table 
JOIN child-table ON parent-table.ID = FK-ID.child-table;

或者,如果您不喜欢连接,您可以忽略它们,只从两个表中获取数据并指定 where 子句,即

SELECT ID.parent-table, variable2.parent-table, variable.child-table
FROM parent-table, child-table
WHERE parent-table.ID = FK-ID.child-table;

上述两个书面查询是等效的。如果您愿意,您可以创建一个新表,让我们将其称为父子表,该表将是一个单独的副本。或者,如果您需要大量使用它,您可以创建一个虚拟表(它存储查询)的 VIEW(您可以 google 一下),例如,如果您在parent-表和子表的更改将反映在父子视图中,但如果您创建单独的新表,父子表的更改将不会反映,因为它只是一个副本。

于 2013-01-07T12:57:02.750 回答