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