テーブルに1列の行を挿入するのはちょっと変わったようです。それは無効ではありませんが、少し奇妙です。
まず、SELECT文を記述します。 IF
は、MySQLでは有効なキーワードではありません。最も近いANSI標準の同等語はCASE
の式です。 MySQLはまた、非標準のIF()
機能を便利に提供します。これをテストする
SELECT CASE
WHEN t.hi > t.ot THEN t.hi
WHEN t.wc < t.ot THEN t.wc
ELSE t.ot
END AS `at`
FROM archive t
、あなたはおそらく、あなたが結果を検証し、および/またはWHERE句でのいくつかの述語を含めることができるようにSELECTリスト内のいくつかの他の列を含めます。
SELECT CASE
WHEN t.hi > t.ot THEN t.hi
WHEN t.wc < t.ot THEN t.wc
ELSE t.ot
END AS `at`
, t.hi
, t.wc
, t.ot
FROM archive t
これはテスト用です。あなたが挿入したい行を返すSELECTを持ってたら、そしてちょうどSELECT
前
INSERT INTO variations (`at`)
を追加し、あなたが行ってもいいでしょう。
注:ではありません。バックエンドでは列名を "at"で囲む必要があります。これはMySQLの予約語ではないためです。しかし、私は、たとえ予約語でないとしても、MySQLのキーワードであるすべての識別子(例えばカラム名)にバッククォートを付ける傾向があります。
MySQLはCASE
の代わりに表現します。同等の結果は、MySQL IF()
関数をネストする式で得ることができます。たとえば、次のように
SELECT IF(t.hi>t.ot,t.hi,IF(t.wc<t.ot,t.wc,t.ot)) AS `at`
FROM archive t
注:MySQLはブール値としてx
を評価するために発生し、x
がTRUEと評価された場合、その後z
を返すy
他返しIF(x,y,z)
表現。
通常、ステートメントにVALUES句を挿入しないでください。 –
クエリ文に 'IF'を使用することはできません。 ['CASE'](https://dev.mysql.com/doc/refman/5.7/en/case.html)を使用する必要があります。それぞれのステートメントの構文については、使用する際にそのドキュメントを参照する必要があります。 – tadman