2017-11-21 14 views
1

私は、前の2つのデータフォームに基づいて、このSQL(MySQL)を作成して3番目のテーブルを更新しようとしています。 理由私はそれが必要です、私たちはいくつかのユーザーテストを行っています、私はDBにアクセスできる唯一の人なので、私は変更をすばやく行うために何らかの方法が必要です。これらの変更はフロントエンド開発者から要求されます。私は確かに電子メールを経由して、user_accountを見つけて3番目のテーブルを見つけることができますが、彼らは私にこのクエリを送り、私はそれを実行するのが理想的でしょう。データベースはテスト1なので、悪いクエリでも害はありません。1つのステートメントでMySQLの更新を行う

要するに、ユーザテーブルは、user_idを介してuser_accountに接続されています。 hirdテーブルはuser_account_idで接続されています。

私はこのSQLを試しましたが、結果は出ません(影響を受ける0行)。クエリの結合を使用して約

UPDATE user_product_status AS ups 
JOIN user_accounts ac ON ac.user_id = ups.user_account_id 
JOIN users u ON u.id = ac.user_id 
SET access_starts_at = '2022-04-03 08:52:58' 
WHERE u.email = '[email protected]' 

答えて

1

それはUPDATE一つ以上のJOIN -edテーブルに可能である方法

SET @id1 = (SELECT id FROM users WHERE email = '[email protected]'); 
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 
1

。クエリは次のとおりです。

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 = '[email protected]' 

あなたが更新されますどのような行をチェックする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 = '[email protected]' 
+0

のMySQL WorkbenchはそのUPDATEが、この位置で有効な入力ではありません不平を言っています。 @VedranMaricevic。 –

+0

。何らかの種類のストアドプロシージャを使用していますか? –

+0

ストアドプロシージャはありません。 MySQLワークベンチ内の通常のSQLコンソール。 @VedranMaricevic。 –

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 = '[email protected]' 
+0

['UPDATE'](https://dev.mysql.com/doc/refman/5.7/en/update.html)ステートメントには' FROM'節は含まれていません。 – axiac

関連する問題