我有2张桌子
ID . Name . Position
= = = = = = = = = = = =
10 . Mike . Analyst
20 . Anna . HR
30 . Mark . Accountant
Deal ID . Status
= = = = = = = = = = = =
10 . . . . . Active
19 . . . . . New
20 . . . . . New
我想在Table1中添加一个新的计算列,并使用以下逻辑:
如果在表2中找到ID,则返回Position,ELSE返回“NONE”
所以输出表应该是这样的
ID . Name . Position . . . . **NewCol**
= = = = = = = = = = = = = = = = =
10 . Mike . Analyst . . . . . **Analyst**
20 . Anna . HR . . . . . . . . **HR**
30 . Mark . Accountant. . **NONE**
答案 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查询,这会降低成本,性能和数据库更改。