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

あなたが書いた:

関連するデータを子テーブルから新しいテーブルにダンプしたいと考えています。したがって、親テーブルと子テーブルのデータを組み合わせたテーブルは必要ありません。これは、JOINが行うことだと思います。

JOIN は、選択したテーブルから2 つ以上の関連データを結合するだけです。つまり、必要な列を SELECT できるということです。つまり、そのようなテーブルがある場合 (元のテーブルから少し更新された列):

親テーブル

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 を取得し、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 で検索できます) を作成できます。テーブルと子テーブルの変更は親子ビューに反映されますが、別の新しいテーブルを作成すると、それは単なるコピーであるため、親子テーブルの変更は反映されません。

于 2013-01-07T12:57:02.750 に答える
0

select * from child_table_name を tblchild として、parent_table_name を tblparent として、ここで tblchild.fk_column_name=tblparent.id

于 2013-01-07T11:03:50.283 に答える