Некоторое время 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 для этого.
Спасибо