在一个语句中对MySQL进行更新

时间:2017-11-21 08:46:35

标签: mysql

我正在尝试使这个SQL(MySQL)更新第三个表,基于前两个数据。 我需要它的原因是,我们正在进行一些用户测试,因为我是唯一一个可以访问数据库的人,我需要一些方法来快速进行更改。前端开发人员要求进行这些更改。我当然可以通过电子邮件,找到user_account,然后找到第三个表,但它们是理想的,他们发送给我这个查询,我只是运行它。数据库是测试数据库,所以即使查询不好也不会造成任何损害。

简而言之。用户表通过user_id连接到user_account。并且hird表通过user_account_id连接。

我尝试过这个SQL,但它没有结果(0行受影响)执行。

SET @id1 = (SELECT id FROM users WHERE email = 'someemail@aaa.com');
SET @id2 = (SELECT id FROM user_accounts WHERE user_id = @id1);
UPDATE user_product_status AS ups
SET access_starts_at = '2022-04-03 08:52:58'
WHERE ups.user_account_id = @id2

3 个答案:

答案 0 :(得分:1)

如何为您的查询使用联接

@Repository
public class SomeDAOImpl

    @PersistenceContext(type = PersistenceContextType.EXTENDED)
    private EntityManager entityManager;

答案 1 :(得分:1)

可以UPDATE一个或多个JOIN - ed表。查询是:

UPDATE user_product_status ups
INNER JOIN user_accounts ua ON ups.user_account_id = ua.id
INNER JOIN users u ON ua.user_id = u.id
SET ups.access_starts_at = '2022-04-03 08:52:58'
WHERE u.email = 'someemail@aaa.com'

您可以将此查询更改为SELECT查询,以检查要更新的行:

SELECT * FROM user_product_status ups
INNER JOIN user_accounts ua ON ups.user_account_id = ua.id
INNER JOIN users u ON ua.user_id = u.id
WHERE u.email = 'someemail@aaa.com'

答案 2 :(得分:0)

UPDATE user_product_status
SET access_starts_at = '2022-04-03 08:52:58'
from user_product_status ups
JOIN user_accounts ac ON ac.user_id = ups.user_account_id
JOIN users u ON u.id = ac.user_id
WHERE u.email = 'someemail@aaa.com'