Estou usando o SQLite 3.27.2-3 no Debian Buster/stable. Eu poderia usar algum outro banco de dados, mas para o meu caso de uso (LuaTeX), algo com baixa sobrecarga parece fazer sentido.
Meu caso de uso é que tenho uma letra (no sentido de correspondência) que se refere a outras letras no texto. Eu tenho uma tabela que é construída automaticamente a partir de referências no texto.
Digamos que a tabela seja assim
RowID From To
===== ==== ==
2019.06.05 PC SW
2019.06.11 PC SB
2019.06.12
2019.06.15 SB PC
2019.06.22 DO SW
e que corresponde a algumas linhas de uma tabela maior, que chamarei de attachments
.
E vamos supor que há uma tabela de abreviaturas que se parece com
Abbreviation Name
============ ====
B Bashful
D Dopey
DO Doc
H Happy
G Grumpy
PC Prince Charming
SB Sleeping Beauty
S Sleepy
SN Sneezy
Então eu quero uma tabela ( abbreviations
) que tenha uma lista das abreviações que ocorrem na minha pequena lista de correspondências. Isso se pareceria
Abbreviation Name
============ ====
DO Doc
PC Prince Charming
SB Sleeping Beauty
SW Snow White
Algo como a consulta abaixo funciona, aproximadamente. Mas também recebo uma saída em branco para quando não corresponde. Estou recebendo erros do SQLite (ou LuaSQL, para ser preciso), então estou querendo saber se é por causa da saída em branco.
Abordagens melhores (e mais simples) apreciadas.
SELECT abbreviations.Abbreviation,
abbreviations.Name
FROM attachments
LEFT OUTER JOIN abbreviations ON attachments.`From`=abbreviations.Abbreviation
WHERE attachments.RowID IN ('2019.06.05',
'2019.06.11',
'2019.06.12',
'2019.06.15',
'2019.06.22')
UNION
SELECT abbreviations.Abbreviation,
abbreviations.Name
FROM attachments
LEFT OUTER JOIN abbreviations ON attachments.`To`=abbreviations.Abbreviation
WHERE attachments.RowID IN ('2019.06.05',
'2019.06.11',
'2019.06.12',
'2019.06.15',
'2019.06.22');