0
おそらく悪いタイトルですが、わかりやすい説明が見つかりませんでした。左から1列を取得する
insert into objects values(1,'Jack');
insert into objects values(2,'Penny');
そして "GEO" で:だから私は、 "オブジェクト" にいくつかのデータを挿入
Table Objects:
ID
NAME
Table Geo:
ID
NAME
PARENT_ID (int)
IDENTIFIER (varchar)
Table ObjectsGeo:
ID
OBJECT_ID
GEO_ID
:
insert into geo values(1,'USA', null, '001');
insert into geo values(2,'New York', 1, '1001');
insert into geo values(3,'England', null, '002');
insert into geo values(4,'London', 3, '1002');
これら
は、イムは、作業テーブルですジャックがニューヨークに住んでいれば、私はこのように挿入します:insert into ObjectsGeo values(1,1,1);
insert into ObjectsGeo values(2,1,2);
これは悪いデータベース設計だと言えば、私は同意する(他の誰かがこれをコード化した)。しかし、これは私が現在行っていることであり、設計上の変更は複雑になる可能性があります。
私はデータベースからJackを取得する必要があるとき、彼がどこに住んでいるか知りたいので、私は "ObjectsGeo"を含むように左の結合を持っているかなり醜い何かをします。私は最初の行(一口)を取るだけで、プログラミングコードでオブジェクトに都市と国を「手動で」配置します。 2つのフィールド(国と都市)を含むJackの行を取得する方法は1つだけです。
---- EDIT ---- テーブルは多かれ少なかれ擬似コードでした。クエリ自体は(も擬似コードなど)でなければなりません:
select o.*, g.identifier from objects o left join ObjectsGeo og on og.object_id = o.id left join Geo g on g.id = og.geo_id where o.id = 1;
これまでに試したことをお伝えください。私はLeft Joinがあなたのためにトリックをすると思います。 –
あなたが試したものと実際の出力が必要なものを投稿してください – XING
私が書いたIMの実際のテーブルではありません。だから、私は推測する(使用しているものから変換された)クエリーは次のようになっているはずです:select o。*、g.identifier オブジェクトfrom left join ObjectsGeo og on og.object_id = o.id left join Geo g on g。 id = og.geo_id o.id = 1; – oderfla