你可以为这种性质的给定数据集做这样的事情:
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