2017-04-14 11 views
0

私はMySQLデータベースに2つのテーブルを持っています。SQLを使って結合クエリを適用する方法

最初の表は、カラム(ID(PK)、タイトル、説明、ステータス)と「プロパティ」で

第二の表は、オブジェクトとプロパティとの間のすべての関係が格納されている「object_property」とそれらの関係であります(ID(pk)、object_id、property_id(fk参照列はプロパティテーブルの 'id')、値)

ここで、関係が存在する 'property'テーブルからすべてのプロパティの結果を抽出したい'object_property'テーブルに存在しません。私はSQLはこのために、クエリに参加記述する必要が

は...

誰も私を助けることはできますか?私はSQLに新しいです。

ありがとうございます!

答えて

0

を:

SELECT p.* 
FROM property p 
LEFT JOIN object_property op 
    ON p.id = op.property_id 
WHERE op.property_id IS NULL 

あなたはHQLでクエリを書いていた場合には、テーブル自体ではなく、テーブルを表すエンティティ(Java POJO)を扱うことになります。私は、次のHQLクエリを提供することができます:

from Property p 
left join p.ObjectProperty as op 
where op is null 

これは、あなたがpropertyテーブルを表しPropertyと呼ばれるクラスを持っていることを前提としています。また、object_propertyテーブルにはエンティティクラスObjectPropertyがあり、PropertyにはObjectPropertyという参照があるものとします。

0

この試してください:あなたは、MySQLで直接実行するには、生のクエリを書いた場合は、次のLEFT JOINを使用することができ

select p.* FROM property p inner join object_property o on o.property_id!=p.id; 
0

次の2つのテーブル、object_property.property_idあなたは共通鍵を共有する行(タプル)を取得するためにこれらのテーブルを結合することができ

をproperty.idへの外部キーである

table property (id, title, description, status, primary key(id)) 
table object_property (id, object_id, property_id, value, primary key(id)) 

を持っていますあなたが検索するここで、LEFT JOINを、内部結合を使用RIGHT JOINを、あなたが一致する内容に応じて、 しかしでき
SELECT p.id, p.title, p.description, p.status, op.id, op.object_id, op.value 
FROM property AS p LEFT JOIN object_property AS op ON p.id = op.property_id ; 

object_propertyテーブルに存在しないIDを持つプロパティの行(LEFT OUTER JOINのOUTER部分)、

SELECT p.id, p.title, p.description, p.status 
FROM property AS p 
WHERE p.id NOT IN (SELECT DISTINCT op.property_id FROM object_property AS op) ; 
関連する問題