添加计算列以检查该值是否在另一个表中

时间:2015-11-05 06:37:29

标签: mysql sql calculated-columns

我有2张桌子

表1

 ID . Name . Position  
= = = = = = = = = = = =  
10 . Mike . Analyst  
20 . Anna . HR  
30 . Mark . Accountant 

表2

 Deal ID . Status  
= = = = = = = = = = = =  
10 . . . . .  Active  
19 . . . . . New  
20 . . . . . New  

我想在Table1中添加一个新的计算列,并使用以下逻辑:

如果在表2中找到ID,则返回Position,ELSE返回“NONE”
所以输出表应该是这样的

Outout

ID . Name . Position . . . . **NewCol**  
= = = = = = = = = = = = = = = = =  
10 . Mike . Analyst . . . . . **Analyst**  
20 . Anna . HR . . . . . . . . **HR**  
30 . Mark . Accountant. . **NONE**  

1 个答案:

答案 0 :(得分:0)

有两种方法可以实现这一目标。

基于查询的结果

如果您只是想在每次需要时显示信息,最简单,最干净和最有效的方法就是在表格中执行SELECT。此外,数据将始终更新,因为查询将在实际的表状态上运行。

所以,查询看起来像这样:

SELECT T1.*, IF(T2.ID IS NULL, 'NONE', T1.Position) As NewPos
FROM Table1 T1 LEFT OUTER JOIN Table2 T2
ON (T1.ID = T2.ID)

此查询将显示在Table2上找到的位置,如果没有,它将显示NULL值,因此它可能对您的需求有用。

数据库修改和数据插入

另一种方法是改变Table1结构以添加列Position。列的存在是指表结构,它不依赖于值,因此您无法更改表并根据行值添加列。

因此,要做的第一步是更改添加列的表,如下所示:

ALTER TABLE table1 ADD COLUMN Position VARCHAR(50);

第二步是填写数据。为此,您必须执行UPDATE来填充刚刚创建的数据,如下所示。

UPDATE Table1 T1 LEFT OUTER JOIN Table2 T2
ON (T1.ID = T2.ID)
SET T1.Position = IF(T2.ID IS NULL, 'NONE', T1.Position);

此查询将更新ID引用的Table2中也存在的行,并将其位置。

这种方式的问题是,如果你执行此操作,之后,你向Table1和Table2添加行,信息将不会更新,你必须每隔一定时间执行UPDATE查询,即数据库和时间成本。

因此,如果应用程序不是太大,在这种情况下最好只使用SELECT查询,这会降低成本,性能和数据库更改。