これはばかげているように思えますが、私はこれを正しく理解できません-どんな助けも大歓迎です!
基本的に: SQL の仕組みを理解するために、RMySQL を使用して簡単な SQL を実行しています。select
簡単な例として、いくつかの SQL クエリを連鎖させたいと思います。これは RMySQL PDF でカバーされていますが、その例は間違った構文のようです ( http://cran.r-project.org/web/packages/RMySQL/RMySQL.pdf、3 ページ、例 6)。
クエリが 3 つある場合は、次のように言います。
q1 <- "SELECT db.table FROM table WHERE stuff = 'blah' "
q2 <- "SELECT db.other_table FROM other_table WHERE stuff = 'different blah' "
q3 <- "SELECT db.table2 FROM table2 WHERE table2 = 1000"
paste
そして、次のようにしてみてください。
script <- paste(q1, q2, q3, sep=";")
結果は
> script
[1] "SELECT db.table FROM table WHERE stuff = 'blah' ;SELECT fb.other_table FROM
other_table WHERE stuff = 'different blah' ;SELECT db.table2 FROM table2 WHERE table2 =
'1000'
したがって、呼び出しdbSendQuery
は明らかに失敗します。
試しまし\"
たが、これも機能しません:
q1 <- "SELECT db.table FROM table WHERE stuff = 'blah' \" "
q2 <- "SELECT db.other_table FROM other_table WHERE stuff = 'different blah' \""
q3 <- "SELECT db.table2 FROM table2 WHERE table2 = 1000 \" "
script <- paste(q1, q2, q3, sep=";")
> script
[1] "SELECT db.table FROM table WHERE stuff = 'blah' \" ; ;SELECT db.other_table FROM
other_table WHERE stuff = 'different blah' \";SELECT db.table2 FROM table2 WHERE table2
= 1000 \" "
誰かが私が間違っていることを指摘できますか?
編集: 明確にするために、次のように RMySQL を介してこれを実行します。
my.queries <- dbGetQuery(my.con, script, client.flag = CLIENT_MULTI_STATEMENTS)
RMySQLマニュアルに従って、私は得る
RS-DBI driver: (could not run statement: You have an error in your SQL syntax;
おそらく、これはpaste
関数の結果が次のようになるためです。
"SELECT db.table FROM table WHERE stuff = 'blah'" ;"SELECT fb.other_table FROM
other_table WHERE stuff = 'different blah'" ;"SELECT db.table2 FROM table2 WHERE table2
= '1000'"
paste
個々のクエリはそれぞれ問題なく機能するため、問題を引き起こしているのは私のコマンドであると想定しています。
EDIT:これを簡単にするために:次のように2つの文字列があるとします:
t1 <- "the 'stuff'"
t2 <- "more 'stuff'"
paste(t1, t2, sep=";")
[1] "the 'stuff' ; more 'stuff' "
私が望むのは、貼り付けコマンドの結果が"the 'stuff'";"more 'stuff'"
.