Функция dbplyr, эквивалентная EXISTS в sql - PullRequest
1 голос
/ 27 апреля 2020

Некоторое время go я задал этот вопрос: Ускорение PostgreSQL запросов (Проверьте, существует ли запись в другой таблице)

Но, поскольку я работаю с DBI с dbplyr в качестве бэкэнда, я хотел бы знать, что такое функция dbplyr, эквивалентная EXISTS функции из PostgreSQL.

Пока я выполняю запрос с использованием литерала SQL sintaxe

myQuery <- 'SELECT "genomic_accession", 
       "assembly", 
       "product_accession", 
       "tmpcol", 
       ( EXISTS (SELECT 1 
                 FROM   "cachedb" c 
                 WHERE  c.product_accession IN ( pt.product_accession, pt.tmpcol 
                                               )) ) 
       AS CACHE, 
       ( EXISTS (SELECT 1 
                 FROM   "sbpdb" s 
                 WHERE  s.product_accession IN ( pt.product_accession, pt.tmpcol 
                                               )) ) 
       AS SBP 
FROM   (SELECT * 
        FROM   "pairtable2") pt; '
dbExecute(db, myQuery) -> tmp

Затем я попытался передать буквальные SQL инструкции для мутации:

pairTable %>% 
  head(n=5000) %>%
  mutate(
    CACHE = sql('EXISTS( select 1 FROM "cacheDB" AS c 
                WHERE c.product_accession IN ( product_accession, tmpcol)  )' ),
    SBP = sql('EXISTS( select 1 FROM "SBPDB" AS s 
                WHERE s.product_accession IN ( product_accession, tmpcol)  )' )
  )

Но вот так, я не знаю, почему мне не хватает все случаи, которые являются ложными, сравнение. И я ожидаю, что есть реализация этого метода в dbplyr или даже некоторый метод DBI для этого.

Спасибо

...