表连接后的SQL更新表属性

时间:2017-07-25 13:53:20

标签: mysql sql

Sql新手。

我有两张桌子。 客户端:

client_id  client_name status
1               JZ       NULL
2               KD       NULL
3               TF       NULL

交易:

transaction_id    Amount client_id  
1                     5     1        
2                     5     2        
3                     5     3        

我可以按如下方式进行联接:

SELECT client.status, client.client_id, client.client_name, SUM(transactions.Amount) AS Balance 
FROM client 
JOIN transactions ON transactions.client_id=client.client_id 
GROUP BY client.client_id 
ORDER BY client_id 

我得到了这个结果:

client_id   client_name   balance  status
1              JZ           5       NULL
2              KD           5       NULL
3              TF           5       NULL

但是,我想更新' status'到' ON'如果客户余额为> = 0,则为' OFF'如果< 0。是否可以这样做,以便它更新客户端'表

1 个答案:

答案 0 :(得分:1)

您的查询有一些语法错误,但您的问题的答案基本上是CASE表达式:

SELECT c.client_id, c.client_name, SUM(t.Amount) AS Balance,
       (CASE WHEN SUM(t.Amount) < 0 THEN 'OFF' ELSE 'ON' END) as status
FROM client c JOIN
     transactions t
     ON t.client_id = c.client_id 
GROUP BY c.client_id 
ORDER BY c.client_id, c.client_name;

如果您想更新表中的值,则需要update。应该适用于大多数数据库的一种方法是:

update client
     set status = (select (case when sum(t.Amount) < 0 then 'OFF' else 'ON' end)
                   from transactions t
                   where t.client_id = client.client_id
                  );

但是,我不建议这样做。下一个事务可能会使状态无效。目前,最好在需要时编写查询以获取信息。