2017-05-08 25 views
0

私は変数などに応じて、テーブルを更新するには:$番号が0であればSQL条件付きの更新場合

$number = 3; 

UPDATE Table1 m 
    SET m.col1 = 1 
    WHERE m.id IN (SELECT id From Table2 where other_id = m.other_id) 
ELSE 
    SET all remaining to 0 
UPDATE Table1 m SET m.col1 = 0 

だから私が望むすべてがあるすべてのレコードが0になる場合は、$番号> 0の量行は、表1 注1を設定する必要があります。私の必要性は、私が正常にPHPとSQLでそれを達成するが、私だろうか、これが何であるかを、より良い社会に :レコードが最後のレコードのDESCのIDリミット$数

編集をする必要があります2つの別々のクエリを実行する必要があります。あなたは、私はそれだけで、SQLで行うことができれば、私は思っていた二つの別々のクエリを使用していますご覧のよう

はPIC

を参照してください。 enter image description here

+3

質問を編集して、サンプルデータと希望する結果を提供してください。 –

答えて

0

あなたが相関サブクエリでそれを行うことができます。

update Table1 m 
    set m.col1 = case 
    when exists(select 1 from Table2 where other_id = m.other_id) 
     then '1' 
     else '0' 
    end 

私はよく分からない場合、MySQLで動作Table1 mテーブルの別名。私はそれがSQLサーバーで動作しないことを知っています。だから、それをこのように記述する必要があります:

update Table1 
    set col1 = case 
    when exists(select 1 from Table2 m2 where m2.other_id = Table1.other_id) 
     then '1' 
     else '0' 
    end 

トリックはあなたがcase when ... then ... else ... end構文を使用することです。相関サブクエリはwhen ...部分にあります。関連する行がTable2に存在するかどうかをチェックします。

update-with-joinトリックも試してみるとよいでしょう。残念ながら、私はSQLサーバでそれを試すことはできません。構文が異なるからです。

UPDATE Table1 m 
LEFT JOIN Table2 m2 on (m.other_id = m2.other_id) 
SET m.col1 = CASE WHEN m2.other_id IS NULL THEN 0 ELSE 1 END