我想根据连接的条件创建一个具有值的列。最好在一个例子中查看:
表1:项目 user_id
,item_id
,item_property
表2:用户喜欢的项目 user_id
,item_id
预期结果:
表3:项目 user_id
,item_id
,item_property
,new_column
如果表2中存在user_id,item_id对(在表1中找到),则new_column
的值为1
,否则为0
。
如何创建实现以下功能的MySql语句?
答案 0 :(得分: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