2016-04-04 9 views
1

単一のStringカラムを使用して一連の名前を表す非常に単純なMySQLテーブルがあります。私はSlickのinsertOrUpdateを使用したいが、間違ったMySQLを生成しているため、エラーが発生する。具体的には、それを更新するために何を指定していないので、これが失敗Slick 3が、1つのカラムテーブルに対して正しくないMySQLアップサートステートメントを生成しています

insert into `TABLE1_NAME` (`column`) values ('value') on duplicate key update 

を実行したいです。同じ列の2つの列を持つテーブルは、

insert into `TABLE2_NAME` (`key`, `other_col`) values ('value1', 'value2') on duplicate key update `other_col`=VALUES(`other_col`) 

のような文で上手くアップしていますか? TABLE1の主キーを設定します。私たちはテーブルプロジェクションのマッピングを間違っているかもしれません。私たちはSlick 3.1.1を使用しています。

class Table1(tag: Tag) extends Table[Table1Record](tag, "TABLE1_NAME") { 
    def value = column[String]("value", O.PrimaryKey, O.Length(254)) 
    def * = (value) <> (Table1Record, Table1Record.unapply) 
} 

class Table2(tag: Tag) extends Table[Table2Record](tag, "TABLE2_NAME") { 
    def value1 = column[String]("value1", O.PrimaryKey, O.Length(254)) 
    def value2 = column[String]("value2", O.Length(254)) 
    def * = (value1, value2) <> (Table2Record.tupled, Table2Record.unapply) 
} 

答えて

2

「挿入または更新」という概念は、1つの列テーブルにはありません。単一の列はキーの一部です。キーが正確に一致する場合、更新する他の列はありません。キーが一致しなかった場合、新しく挿入された行はどのキーとも重複しないので、更新句は発生しません。更新する他の列がないので、生成されたSQLは不正です。後にいくつかのフィールド名が追加されることを想定してテキストが生成されましたが、追加するフィールド名はありません。それはupdate句で唯一の非キー列を示しています

insert into `TABLE2_NAME` (`key`, `other_col`) 
values ('value1', 'value2') 
on duplicate key update `other_col`=VALUES(`other_col`) 

のようなところで

は、2列のテーブルのために、insert文が見えます。 (これを正しく入力すると、1列テーブルで何が起こっているのかをよりよく理解するのに役立ちます)。

+0

です。だから私が本当に欲しいのは、[この質問](https://stackoverflow.com/questions/30706193/insert-if-not-exists-in-slick-3-0-0)のように "存在しない場合は挿入してください" 。ありがとう! – broadmonkey

関連する問題