私は次のフィールドを持つ2つのテーブルを持っており、主キーはemail
です。列が存在する場合にテーブルを更新するMysql他のテーブルを更新する(非正規化テーブル)
------------------------------------------------------
|TABLE 1 (userlist) | TABLE 2 (preregistereduser)|
|----------------------------------------------------|
| | |-- same fields
|email | email |
|firstName | firstName |
|lastName | lastName |
|department | department |
|designation | designation |
| | |-- different fields
|verified | locationid |
|mobile | isEnable |
|userType | role |
|gender | userupdated |
|funID | status |
|type | ltype |
|curator | coach |
------------------------------------------------------
ご覧のとおり、いくつかのキーは両方のテーブルに存在し、一部は1つのテーブルにしかありません。フィールドは他の両方のテーブルに存在している場合今私は、フィールドがそれを行うにはどのように
UPDATE preregisterUser pu,userlist ul
if exists (select mobile from preregisterUser) set pu.mobile = "1234",
if exists (select mobile from userlist) set ul.mobile = "1234"
where pu.email="[email protected]" and ul.email="[email protected]"
のような通常のMySQLのクエリには、この手順
IF EXISTS(select mobile from preregisterUser)
THEN
BEGIN
update preregisterUser set mobile = "123456" where email="[email protected]"
END;
IF EXISTS(select mobile from userlist)
BEGIN
update userlist set mobile = "123456" where email="[email protected]"
END;
END IF;
のようなものが存在する場合、テーブルを更新し、両方のテーブルを更新したいですか?私が見つけたのは、もし存在すれば、一つのテーブルに挿入するだけで更新されたものです。
注:フィールドは、2つのテーブルのいずれかに少なくとも存在しますが、フィールドが両方のテーブルに存在しない場合はありません。また、ここに記載されているフィールドと値は例です
動的にSQL文を構築する必要があります。クエリを試して実行するときに、列が存在しない場合は、クエリを準備する最初のフェーズは、試行して実行する前に失敗します。 –
データが実際に正しく正規化されていません。現在複数のテーブルに複製されているフィールドを含むテーブルが1つ必要です。次に、異なる別のレコードを含む他の「拡張」テーブルに外部キーが必要です。その後、この問題は解消されます。または、1つのテーブル全体が、いくつかのフィールドがNULL可能です。いずれにしても、レコードのタイプ(この例では、ユーザーのタイプまたはステータス)を示す追加の列があります。 – ADyson
常に1つのテーブルが最初に更新されますか? ex1 case1:まずTable1を更新し、Table2またはcase2を動的に更新する必要があります。いずれか1つを更新し、次にもう一方を更新する必要があります。 case1があなたのシナリオである場合、私は自分のソリューションを投稿します。 –