2016-07-01 27 views
1

この表にはAMEXとCashOnlyという名前の列があります。どちらも1または0の値を持ちます.1と0の代わりに、すべての '1'の値を 'YES'に変更し、すべての '0'の値を 'NO'に変更して、視聴者に理解できる。MySQL:同じ列の複数の行の値を更新する

これを達成するために使用できる最も効率的なSQLクエリは何ですか?

+0

あなた 'AMEX'と' CashOnly'列の種類は何ですか? –

+0

AMEXとCashOnlyはintに設定されています。それをvarcharに変更したら、適切な "UPDATE"クエリは何でしょうか? – lexus

答えて

1

は、単一UPDATEステートメントを使用します。また、テーブルのすべてのレコードを更新する必要があるため、WHERE句はありません。

+0

こんにちは、私は試してみましたが、 "#1064 - Erreur de syntaxeprèsde 'と言っているエラーが出ました。CashOnly = CASE CashOnly =' 0 'THEN' NO ' ELSE' YES ' END'Ãla ligne 6 – lexus

+0

@lexus残念ですが、そこに余分な 'SET'文がありました。今はうまくいくはずです。 –

+0

これは今働いています。 – lexus

0

だけcaseステートメントを使用します。

UPDATE yourTable 
SET AMEX  = CASE WHEN AMEX = '0'  THEN 'NO' ELSE 'YES' END, 
    CashOnly = CASE WHEN CashOnly = '0' THEN 'NO' ELSE 'YES' END 

注これはあなたがVARCHARにごAMEXCashOnly列を変換していることを前提としていること:

select (case when AMEX = 1 then 'YES' else 'NO' end) as AMEX, 
     (case when cash = 1 then 'YES' else 'NO' end) as cash 
. . . 
+0

こんにちは、それは働いた、しかし、それはフィールドのエントリを選択し、本当に値を変更しませんでした。私は適切なキーワードは "UPDATE"でなければならないと思いますが、この種の問題にどのように使用するかについての構文についてはわかりません。 – lexus

+0

代わりにビューを使用してください。値を変更しないでください。既存の値は整数で、文字に変更する必要があります。 –

0

あなたの列の型を変更したい場合、あなたは、次の操作を行う必要があります(int型のフィールドとして値としてはい/いいえを格納することはできません)

2余分なenumフィールドを作成するには、今の好きな名前を付けます。それらをamex1とcash1にしましょう。その値を 'yes'、 'no'としてデフォルト値をnoに設定します。

次の2つのクエリを1つずつ実行します。

UPDATE table_name SET amex1 = 'yes' WHERE amex = 1; 
UPDATE table_name SET cash1 = 'yes' WHERE cash = 1; 

現金とamex列の名前をそれぞれcash1とamex1を現金とamexにそれぞれ削除します。これがあなたを助けることを望みます。

0

これを試してみてください。

update table set amex=(case when AMEX = 1 then 'YES' else 'NO' end) , 
CashOnly=(case when CashOnly= 1 then 'YES' else 'NO' end); 

OR

update table set amex='Yes' where amex=1; 
update table set amex='No' where amex=0; 
update table set CashOnly='Yes' where CashOnly=1; 
update table set CashOnly='No' where CashOnly=0;