我正在尝试使用子变量检索表中的所有行,其中这些行的外键等于具有父变量的表中的行的主键。
图形上看起来像这样:
表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多行。子表有8000多行。
更新:我想将子表中的相关数据转储到新表中。所以我不希望组合表与父表和子表中的数据,这是我想的JOIN。
更新2:我设法得到了我想要的东西:
INSERT INTO NewTable
select columns
from ChildrenTable t
inner join ParentTable p
on t.parentId = p.Id
感谢您的帮助!
答案 0 :(得分:1)
你可以这样试试 -
Select * from table1 left join table2 on table1.id = table2.fk
答案 1 :(得分:0)
您可以尝试使用:
select * from table2, table1 where table2.fk = table1.id
答案 2 :(得分:0)
select * from child_table_name为tblchild,parent_table_name为tblparent,其中tblchild.fk_column_name = tblparent.id
答案 3 :(得分:0)
您写道:
我想从子表中转储相关数据 表。所以我不希望组合表与来自父和的数据 儿童表,这是我认为的JOIN。
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,从第一个表中检索variabl2,从第二个表中检索变量
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;
以上两种书面查询都是等效的。如果您希望可以创建新表,请将其称为 parent-child-table ,并将该数据作为单独的副本。或者,如果你需要经常使用它,你可以创建一个VIEW(你可以谷歌关于它),它是虚拟表(它存储一个查询),例如我们称之为 parent-child-view < / em>如果您在父表中进行了一些更改,子表更改将反映在父子视图中,但是如果您创建一个单独的新表 parent-child-table < / em>变化不会被反映,因为它只是一个副本。