0

次のように、データベースに2つのテーブルがあります(質問のために簡略化されています):

私が持っている2つのテーブル

既存のテーブルを変更したり、新しいテーブルを作成したりしたくありませんが、このすべてのデータを次のようにコード内の統合オブジェクトに入れたいと考えています。

欲しいデータ

実際には、TABLE2 にはさらに多くのプロパティがありますが、私が興味を持っているのは食べ物と色だけです。

私はデータベースにまったく慣れていないので、ご容赦ください-これを行う簡単な方法はありますか? 私が今考えていることは、

SELECT * FROM TABLE1

SELECT PROPERTY_VALUE, UNIQUE_IDENTIFIER 
FROM TABLE2 
WHERE PROPERTY_NAME = 'Favorite Color'

SELECT PROPERTY_VALUE, UNIQUE IDENTIFIER 
FROM TABLE2 
WHERE PROPERTY_NAME = 'Favorite Food'

そして、どういうわけかそれらをまとめます...もっと良い方法はありますか? または、そうでない場合、ここからどこに行くのですか?

4

3 に答える 3

6

これを行うにはいくつかの方法がありますが、どちらを使用するかに関係なく、通常、クエリを作成するときに結果セット内の列の数と名前を知る必要があります。好きな食べ物と好きな色を指定できますが、そのテーブルに他のプロパティがある場合、それらは表示されません。バニラ SQL でそれを自動化する方法はありません。その種のスキーマから任意のプロパティを取得する場合は、動的 SQL またはクライアント側言語を使用する必要があります。

その制約が邪魔にならないので、これを行う 1 つの方法を見てみましょう。

SELECT m.unique, m.last_name, m.first_Name, s1.property_Value As Favorite_Food, s2.property_Value As Favorite_Color
FROM Table_1 m
LEFT JOIN Table_2 s1 ON s1.unique = m.unique and s1.property_Name = 'Favorite Food'
LEFT JOIN Table_2 s2 ON s2.unique = m.unique and s2.property_Name = 'Favorite Color'

もう 1 つのオプションは、PIVOT キーワードを使用することですが、実際のデータの詳細がわかるまでは、上記の結合で十分です。

于 2012-11-12T22:26:51.810 に答える
1

これは、既存の 2 つのテーブルから新しいテーブル TABLE3 を作成するコードです。新しいテーブルを作成する必要がない場合は、最初の行 (INSERT) を削除してください。

INSERT INTO TABLE3 
SELECT 
    TABLE1.`UNIQUE IDENTIFIER`, 
    TABLE1.`First Name`, 
    TABLE1.`Last Name`, 
    TABLE2a.`Property Value`, 
    TABLE2b.`Property Value` 
 FROM TABLE1
 INNER JOIN TABLE2 AS TABLE2a 
     ON TABLE2a.`UNIQUE IDENTIFIER`=TABLE1.`UNIQUE IDENTIFIER`
 INNER JOIN TABLE2 AS TABLE2b 
     ON TABLE2b.`UNIQUE IDENTIFIER`=TABLE1.`UNIQUE IDENTIFIER` 
 WHERE 
     TABLE2a.`Property Name`='Favorite Food' 
 AND
     TABLE2b.`Propery Name`='Favorite Color';
于 2012-11-12T22:29:53.923 に答える
0

ジョインはどうですか?

select * from TABLE1 join TABLE2 on TABLE1.UNIQUE_IDENTIFIER = TABLE2.UNIQUE_IDENTIFIER;

両方の単一テーブルのすべてのテーブルを結合したテーブルを作成します。特定の列のみが必要な場合は、* を選択した列に置き換えます。

于 2012-11-12T22:25:54.713 に答える