2017-05-10 4 views
0

私は次のフィールドを持つ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つのテーブルのいずれかに少なくとも存在しますが、フィールドが両方のテーブルに存在しない場合はありません。また、ここに記載されているフィールドと値は例です

+0

動的にSQL文を構築する必要があります。クエリを試して実行するときに、列が存在しない場合は、クエリを準備する最初のフェーズは、試行して実行する前に失敗します。 –

+0

データが実際に正しく正規化されていません。現在複数のテーブルに複製されているフィールドを含むテーブルが1つ必要です。次に、異なる別のレコードを含む他の「拡張」テーブルに外部キーが必要です。その後、この問題は解消されます。または、1つのテーブル全体が、いくつかのフィールドがNULL可能です。いずれにしても、レコードのタイプ(この例では、ユーザーのタイプまたはステータス)を示す追加の列があります。 – ADyson

+0

常に1つのテーブルが最初に更新されますか? ex1 case1:まずTable1を更新し、Table2またはcase2を動的に更新する必要があります。いずれか1つを更新し、次にもう一方を更新する必要があります。 case1があなたのシナリオである場合、私は自分のソリューションを投稿します。 –

答えて

-1

私はあなたの選択において、あなたのPkeyを持っていてあなたは使用しないようなことを試すことができると思います。フィールドを持つすべてのユーザーのために 1:

IF EXISTS(select mobile from preregisterUser where email="[email protected]) 
     BEGIN 
      update preregisterUser set mobile = "123456" where email="[email protected]" 
     END; 
ELSEIF EXISTS(select mobile from userlist where email="[email protected]) 
     BEGIN 
      update userlist set mobile = "123456" where email="[email protected]" 
     END; 

もう一つのポイントは、あなたのデータを複製しないように3つのテーブルを作成することができます |のuserId |メール|のfirstName | lastNameの|部門|指定

と2その他:

| idList |検証済み|モバイル|ユーザータイプ|性別| funID |タイプ|キュレーター|ユーザーID | | idPreRegistration | locationid | isEnable | role | userupdated | status | ltype | ltype |コーチ| userId |

あなたはFkeyユーザーIDを使用してを選択します。

+0

外部の手続き以外で直接使用することはできません。通常のexcecutable mysqlクエリと同じ条件が必要です。あなたは私の質問を理解してくれるといいですね。 – Mani

関連する問題