[SQL] 번역 SQL은 R data.table 구문 외래 키에 조인
SQL번역 SQL은 R data.table 구문 외래 키에 조인
data.table 패키지는 SQL과 같은 테이블 처리 방법을 많이 제공합니다. 테이블이 키를 가지고 있다면, 그 키는 하나 개 이상의 컬럼으로 구성되어 있습니다. 이 같은 시간에 두 가지 방법으로 분류 할 수 없기 때문에 그러나 테이블은 하나 이상의 키를 가질 수 없습니다.
이 예에서, X 및 Y는 단일 키 열 "ID"와 data.tables이다; Y는 키가 아닌 열 "x_id"을 가지고있다.
X <- data.table(id = 1:5, a=4:8,key="id")
Y <- data.table(id = c(1,1, 3,5,7), x_id=c(1,4:1), key="id")
다음 구문은 테이블을 자신의 키에 결합 할 것입니다 :
X[Y]
어떻게 data.table 코드에 다음과 같은 SQL 구문을 번역 할 수 있습니다?
select * from X join Y on X.id = Y.x_id;
내가 찍었을 그 가장 가까운입니다 :
Y[X,list(id, x_id),by = x_id,nomatch=0]
그러나,이 같은 내부는 SQL 문으로 참여하지 않습니다.
여기에 외부 키가 y_id되는 더 명확 예를 들어, 우리는이 Y2 곳 X2 $ y_id = Y2 $ ID의 값을 조회하기 위해 가입합니다.
X2 <- data.table(id = 1:5, y_id = c(1,1,2,2,2), key="id")
Y2 <- data.table(id = 1:5, b = letters[1:5], key="id")
나는 테이블을 생성하고 싶습니다 :
id y_id b
1 1 "a"
2 1 "a"
3 2 "b"
4 2 "b"
5 2 "b"
다음 kludge에 의해 수행되는 것과 유사 :
> merge(data.frame(X2), data.frame(Y2), by.x = "y_id", by.y = "id")
y_id id b
1 1 1 a
2 1 2 a
3 2 3 b
4 2 4 b
5 2 5 b
그러나, 나는이 작업을 수행 할 때 :
X2[Y2, 1:2,by = y_id]
내가 원하는 결과를 얻을하지 않습니다 :
y_id V1
[1,] 1 1
[2,] 1 2
[3,] 2 1
[4,] 2 2
해결법
-
==============================
1.좋은 질문. ?에서 data.table 다음을 (틀림없이 매장) 참고 :
좋은 질문. ?에서 data.table 다음을 (틀림없이 매장) 참고 :
그래서, 여기 열쇠는 내가 키가 될 필요가 없다는 것입니다. 최근 x는 키가 있어야합니다.
X2 <- data.table(id = 11:15, y_id = c(14,14,11,12,12), key="id") id y_id [1,] 11 14 [2,] 12 14 [3,] 13 11 [4,] 14 12 [5,] 15 12 Y2 <- data.table(id = 11:15, b = letters[1:5], key="id") id b [1,] 11 a [2,] 12 b [3,] 13 c [4,] 14 d [5,] 15 e Y2[J(X2$y_id)] # binary search for each item of (unsorted and unkeyed) i id b [1,] 14 d [2,] 14 d [3,] 11 a [4,] 12 b [5,] 12 b
또는,
Y2[SJ(X2$y_id)] # binary merge of keyed i, see ?SJ id b [1,] 11 a [2,] 12 b [3,] 12 b [4,] 14 d [5,] 14 d identical(Y2[J(X2$y_id)], Y2[X2$y_id]) [1] FALSE
from https://stackoverflow.com/questions/9914734/translating-sql-joins-on-foreign-keys-to-r-data-table-syntax by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 테이블의 특정 컬럼의 첫 번째 문자를 제거하는 방법은 무엇입니까? (0) | 2020.07.22 |
---|---|
[SQL] 외부 데이터베이스에 연결 - 안드로이드 응용 프로그램을 (0) | 2020.07.22 |
[SQL] 스프링 JDBC를 사용하는 경우 (+20 라인 SQL) 긴 청소 방법을 구체화하기 위해? [닫은] (0) | 2020.07.22 |
[SQL] 4 액세스 표 속성을 가입 난간 (0) | 2020.07.22 |
[SQL] SQL 쿼리 복잡성 대 성능에 어떤 일반적인 규칙이 있습니까? (0) | 2020.07.22 |