私はSQL
とSqlite
に新しく、これは正しくないかもしれませんが、学問的な理由から私は自分自身を作成した汚れたデータベース。私がボキャブラリーが正しくない場合は私は許し、私はまだ学習過程にある。SQLite:同じ外部キーを共有するすべての項目を選択
それぞれ異なる種類のエンティティを持つテーブルセットを作成しましたが、それらはすべて類似しています。異なる値の同じForeign Key
の複数の出現を共有します。
表M1:2つのアイテムとエンティティ:すべての前のデータ列はUnique Key
以下(表N)にForeign Keys
ある
+------------+---------+--------+-------+-------+
Primary Key Unique ID Data1 Data2 Data3
+------------+---------+--------+-------+-------+
1 y1 103021 103022 103001
:
+------------+---------+--------+-------+
Primary Key Unique ID Data1 Data2
+------------+---------+--------+-------+
1 x1 103021 103022
表M2:3つの項目を持つエンティティ
+------------+---------+--------+-------+
Primary Key Unique ID Data1 Data2
+------------+---------+--------+-------+
1 100002 ... ...
2 103001 ... ...
3 103021 ... ...
4 103022 ... ...
私がする必要があるのは、aを共有するすべてのエンティティ固有のアイテム(My Foreign Key
)を指定します。例えば、103022
が与えられた場合、2つのエンティティ:x1
およびy1
が与えられます。
今私は数日を試していて、私はJOIN
ステートメントで必要な情報を得ることができました。
INNER JOINを:
SELECT N.id, T1.id FROM N INNER JOIN M1 as T1 on T1.data1=N.id OR T1.data2=N.id
CROSS JOINを:私は一度に一つのテーブルを行うと、後工程をリアルタイムでのpythonで、と私は理解している場合
SELECT N.id, T1.id FROM N CROSS JOIN M1 as T1 WHERE T1.data1=N.id OR T1.data2=N.id
INNER JOIN
にのみ機能しますがCROSS JOIN
は私のデータのデカルト積を生成し、他のテーブルとブール条件を追加するときに、あまりにも多くのメモリを使いやすくなります。だから私はそれがオプションではないと思う。
私が考えていない方法はありますか?
ありがとうございました!
あなたは何が出力されているかを知ることができますか? –
1.あなたの文章は、M1、M2&N、またはあなたが望む出力については明確ではありません。明確に説明するのに十分な文章を使用してください。 [mcve]を読んで行動する。どの列がFKであるかを他の列に正確に教えてください。 2.実装についての誤解があります。これらの2つの結合は、実用的なDBMSで同じ方法で実装されます。 https://stackoverflow.com/q/44917/3404097また、実装の最適化を心配する前に、単純なクエリを書く方法とクエリの意味について多くのことを学ぶ必要があります。 – philipxy
@philipxy:まず、私はここで学ぶためにここにいることを明らかにした。批判する必要はない。私はあなたの疑問の答えを簡単に見つけることができますが、あなたのリンクを読んでいます。それはあまり役に立たない。 一方、INNERとCROSS結合が同じ効果を持つことを示唆することはできません。CROSS結合はプロセスをクラッシュさせます。 – Chang