根据加入条件

时间:2016-11-27 00:19:00

标签: mysql

我想根据连接的条件创建一个具有值的列。最好在一个例子中查看:

表1:项目 user_iditem_iditem_property

表2:用户喜欢的项目 user_iditem_id

预期结果:

表3:项目 user_iditem_iditem_propertynew_column

如果表2中存在user_id,item_id对(在表1中找到),则new_column的值为1,否则为0

如何创建实现以下功能的MySql语句?

1 个答案:

答案 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