2016-11-27 16 views
0

結合の条件に基づいて値を持つ列を作成したいとします。ベスト例で表示:結合条件に基づいて列を追加します。

表1:アイテムuser_iditem_iditem_property

表2:

表3:アイテムのユーザーが

item_id

期待される結果をuser_idを言っています:品目user_id,item_id,item_property,new_column

(表1に見られる)USER_ID、ITEM_ID対は、表2中に存在する場合 new_columnの値のいずれかである 1

0さもなければ。

次のようなMySql文を作成するにはどうすればよいですか?

答えて

2

あなたはこのような性質の与えられたデータセットに対して、このような何かを行うことができます。

create table items (
    user_id int, 
    item_id int, 
    item_property text 
); 
create table liked (
    user_id int, 
    item_id int 
); 

insert into items values 
(1, 1, 'Ball'), (1, 2, 'Bat'), (1, 3, 'Glove'), 
(2, 4, 'Jar'), (2, 5, 'Cooker'), (2, 6, 'Stove'), 
(3, 7, 'Ram'), (3, 8, 'CPU'), (3, 9, 'SSD'); 

insert into liked values 
(1, 2), (2, 6), (3, 7); 

クエリ

select i.*, case when l.user_id is null then 0 else 1 end as liked 
from items i 
left join liked l 
    on i.user_id = l.user_id 
    and i.item_id = l.item_id 

結果

| user_id | item_id | item_property | liked | 
|---------|---------|---------------|-------| 
|  1 |  2 |   Bat |  1 | 
|  2 |  6 |   Stove |  1 | 
|  3 |  7 |   Ram |  1 | 
|  1 |  1 |   Ball |  0 | 
|  1 |  3 |   Glove |  0 | 
|  2 |  4 |   Jar |  0 | 
|  2 |  5 |  Cooker |  0 | 
|  3 |  8 |   CPU |  0 | 
|  3 |  9 |   SSD |  0 | 

の推奨事項

追加の列で新しいテーブルを作成しないでください。適切なSQLクエリを実行して、好みのテーブル内の実際のフィールドと追加の派生/計算フィールドを取得します。

は、あなたがこのようなビューを作成することができ、テーブルをシミュレートするには、次の

create view items_liked 
as 
select i.*, case when l.user_id is null then 0 else 1 end as liked 
from items i 
left join liked l 
    on i.user_id = l.user_id 
    and i.item_id = l.item_id; 

そのように、あなたは常にテーブルを作成することなく、あなたが望んでいたデータをselect * from items_likedを実行して取得することができます。

例がここにあります:http://sqlfiddle.com/#!9/8a4ef/1

関連する問題