2

クエリまたはフォームを実行しようとしています:

SELECT a.col1, b.col2 FROM tbl1 a, tbl2 b 
WHERE a.col2 = b.col1
AND a.col3 = df$x
AND a.col4 = df$y 

RJDBC を使用する Oracle データベース上。識別する列 x と y を持つデータ フレームがあります。データ フレーム内の個々の値のクエリを生成および実行する方法の詳細が見つかりません。

私のデータフレームは次の形式です:

df <- data.frame(x=c("LIB258", "LIB258", "LIB359"), y=c("A01", "B03", "C08"))

そのため、3 つの異なるクエリを生成して順次実行し、結果をデータ フレームに収集する方法が必要です。

Rでこれを行うエレガントな方法はありますか? ちょっとしたpaste魔法を使って個々のクエリを作成できることはわかっていますが、それらを実行して結果をデータフレームに返すにはどうすればよいでしょうか?

ありがとうハッサン

4

2 に答える 2

2

プライヤーとペーストを使って

library(plyr)
dff <- data.frame(x=c("LIB258", "LIB258", "LIB359"), y=c("A01", "B03", "C08"))
ddply(dff,.(x,y),
          function(rr){
          query <- paste("SELECT a.col1, b.col2 FROM tbl1 a, tbl2 b ",
                         "WHERE a.col2 = b.col1",
                         paste("AND a.col3 = ",rr$x,sep=''),
                         paste("AND a.col4 = ",rr$y,sep=''),sep ='\n')

          result <- dbGetQuery(conn, query)
          })

this should retuen something like : 

     x   y col1 col2
1 LIB258 A01    4    3
2 LIB258 A01    3    2
3 LIB258 A01    1    1
4 LIB258 B03    1    3
5 LIB258 B03    4    1
6 LIB258 B03    3    4
7 LIB359 C08    6    5
8 LIB359 C08    3    1
9 LIB359 C08    1    4
于 2012-11-26T17:51:09.737 に答える
2

RJDBC はわかりませんが、RODBC を使用したことがあります。pasteまたはを少し使用paste0して、クエリを作成できます。

query.list <- paste0("
  SELECT a.col1, b.col2 FROM tbl1 a, tbl2 b 
  WHERE a.col2 = b.col1
  AND a.col3 = ",df$x,"
  AND a.col4 = ",df$y)

次にlapply、次のようなものを使用します

result.set <- lapply(query.list,dbGetQuery,conn=con)

これにより、データ フレームのリストが返されます。次に、それらをすべて元に戻すことができます

final.df <- do.call(rbind,result.set)
于 2012-11-26T17:23:12.077 に答える