基于三个表更新列

时间:2014-04-11 19:19:25

标签: sql-server sql-update

我知道这是非常不专业的,但这是我们的业务系统所以我无法改变它。

我有三个表:t_posListt_urlt_type。表格t_posList有一个名为URL的列,该列也存储在表格t_url中(表格t_url的ID未保存在t_posList中,所以我必须找到它像posList.Url = t_url.Url)。

如果出现以下情况,则每个数据行的列t_posList.status应更新为“非客户”(它将是状态ID,但请保持简单):t_url的ID无法找到在t_type.url_id

所以查询有两个步骤:首先我必须得到t_posList.Url = t_url.Url所有的数据行。在此之后,我必须检查找到的t_url行中哪些ID可以在t_type.url_id中找到 NOT

我真的希望你知道我的意思。因为我们的系统非常不专业,而且我的SQL知识不是那么好,所以我无法进行此查询。

编辑:我试过这个:

UPDATE t_poslist SET status = ( 
    SELECT 'non-customer'
    FROM t_url, t_type
    WHERE url in 
           (select url from t_url 
            LEFT JOIN t_type ON t_url.ID = t_type.url_id 
            WHERE t_type.url_id is null)
)

1 个答案:

答案 0 :(得分:0)

这个怎么样?

UPDATE p
SET status = 'non-customer'
FROM t_poslist  p
INNER JOIN t_url u ON u.url = p.url
WHERE NOT EXISTS
(
  SELECT * FROM t_type t WHERE t.url_id = u.ID
)