0

2 つのテーブルがあり、1 つのテーブルには各行にいくつかの情報があり、別のテーブルに含まれる ID のカンマ区切りのリストがあります。現在、テーブル A (カンマ区切りの ID) からデータを取得しており、テーブル B (追加情報を含むテーブル) からもすべてのデータを取得したいと考えています。可能な限り最も効率的な SQL メソッドでこれを行いたいと思います。

フィールドのIDに基づいてテーブルBをテーブルAに結合することを考えていましたが、これが可能かどうかはわかりませんでした. また、別の IN ステートメントに基づいてテーブル A からデータを取得していることに注意することも重要です。したがって、最終的な目標は、テーブル A の行のフィールドにある ID に応じて、テーブル B のすべての行をテーブル A の行にアタッチすることです。 (行単位)

誰かがそのすべてをたどって、私がやろうとしていることを知っているなら、サンプルクエリをいただければ幸いです:D

さらに説明が必要な場合は、喜んで提供いたします。

ありがとう

テーブルAが現在セットアップされている方法:

`table_a_id` VARCHAR ( 6 ) NOT NULL,
`table_b_ids` TEXT NOT NULL, -- This is a comma seperated list at the moment
-- More data here that is irrelevant to this question but i am grabbing

テーブル B は次のように設定されます。

`table_b_id` VARCHAR ( 6 ) NOT NULL,
`name` VARCHAR ( 128 ) NOT NULL,
-- More data that is not relevant to the question

また、私は最終的に Cassandra のような NOSQL システムに切り替えたいと思っています。簡単に読んだことから、NOSQL には結合のようなものがないことを理解していますか? ボーナス ヘルプは、これらのテーブルをセットアップするのを手伝ってくれるので、コンバージョンと難易度を抑えて変換できます。

4

2 に答える 2

3

別のテーブルを追加する必要があります。

Person -- your Table A
------
PersonID 

Thing -- your Table B
------
ThingID
ThingName

PersonThing -- new intersection table
-------
PersonID
ThingID

次に、クエリは次のようになります

SELECT * from Person
INNER JOIN PersonThing ON Person.PersonID = PersonThing.PersonID
INNER JOIN Thing ON PersonThing.ThingID = Thing.ThingID

だから今どこにいるの

001 | Sam Spade | 12,23,14

あなたが持っているだろう

Person
001 | Sam Spade

Thing
12 | box
23 | chair
14 | wheel

PersonThing
001 | 12
001 | 23
001 | 14

これは、「正規化」によって他の回答が意味するものです。

編集して追加

私が NoSQL について理解していることから、次のように結合を回避できます。

Person -- your Table A
------
PersonID
OtherPersonStuff

Thing -- your Table B
------
ThingID
ThingName
OtherThingStuff


PersonThing -- denormalized table, one record for each Thing held by each Person
-------
PersonID
ThingID
ThingName
OtherThingStuff

余分なスペースを占有する (モノの情報を何度も複製することによる) ことと、潜在的なデータ管理の問題 (複製の同期を維持することによる) と引き換えに、より単純で高速なクエリを取得できます。

したがって、最後のテーブルは次のようになります。

PersonThing
001 | 12 | box   | $2.00
001 | 23 | chair | $3.00
001 | 14 | wheel | $1.00
002 | 12 | box   | $2.00
003 | 14 | wheel | $1.00

この場合、OtherThingStuff は Thing の値です。

于 2012-08-08T16:57:46.730 に答える
2

結合を使用するには、データベース スキーマを正規化することを検討する必要があります。コンマ区切りのリストを使用すると、SQL IN コマンドを使用できなくなります。

それを行う最善の方法は、一意の ID ごとに行を格納することです。TableA.id = TableB.id

于 2012-08-08T16:56:12.053 に答える