2016-11-27 83 views
0

我想根据连接的条件创建一个具有值的列。根据连接条件添加列

表1:在一个示例中显示最佳相关user_iditem_iditem_property

表2:产品用户喜欢user_iditem_id

预期结果:

表3 :商品user_id,item_id,item_property,new_column

new_column的值是1如果USER_ID,ITEM_ID对(在表1中发现的)是存在于表2中,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