RSQlite: получение данных из таблицы, данные значения в другой - PullRequest
0 голосов
/ 25 октября 2019

Допустим, у меня есть две таблицы, A и B.

Table A
X  Y  Z
1  2  3
4  5  6
7  8  9

Table B
W  X  Y
3  1  4
4  4  5
7  5  9

Я определил X-значения таблицы A как 1 и 4 как интересные из-за того, что происходит с Z (онименьше 8 или что)В таблице B я хочу выбрать значения столбца W, которые имеют X-значения 1 и 4.

Я открыт для двух подходов.

  1. Делать все с помощью SQLкоманды, которые я вызываю из функций RSQLite

  2. Использование R для формирования фрейма данных.

Поскольку я достаточно хорошо знаю R и ничего оSQL, я преследую подход № 2. Я легко могу выбрать столбцы X и Z с X = 1 и X = 4 и создать кадр данных.

Что не сработало, так это когда я пытаюсь найти X = 1 и X = 4 в таблице B, если я ввожу значение в dbGetQuery, все работает.

Однако у меня много значений, и я не могу сделать их все вручную. dbGetQuery не позволяет мне передавать значения из таблицы A, когда я вызываю их как ...WHERE "X" = str(data.frame(A)[1:2,1]). Кажется, ошибка, которую я получаю, кажется, что я ищу столбец с именем "1" вместо "X".

Ответы [ 3 ]

4 голосов
/ 25 октября 2019

В чистом sql это простое объединение двух таблиц с фильтрацией только по a.z значениям, которые вас интересуют:

SELECT b.w FROM b JOIN a ON b.x = a.x WHERE a.z < 8;
w
----------
3
4
2 голосов
/ 25 октября 2019
sqlite> .headers on
sqlite> select W from B where X in (select X from A where Z < 9);
W
3
4 
2 голосов
/ 25 октября 2019
library(dplyr)

Table_A %>% 
  filter(Z < 8) %>% 
  inner_join(., Table_B, by="X", suffix=c(".A",".B")) %>% 
  select(W)

#>   W
#> 1 3
#> 2 4
...