根据MySQL中的ID列表检索行

时间:2013-01-07 10:57:56

标签: mysql

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

图形上看起来像这样:

表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

感谢您的帮助!

4 个答案:

答案 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>变化不会被反映,因为它只是一个副本。