Query

列出與表的兩列中的值匹配的 ID

  • July 10, 2019

我在 Debian Buster/stable 上使用 SQLite 3.27.2-3。我可以使用其他一些數據庫,但對於我的案例(LuaTeX)來說,低成本的東西似乎是有道理的。

我的案例是我有一個字母(在對應的意義上),它指的是文本中的其他字母。我有一個表格,它是根據文本中的引用自動建構的。

假設桌子看起來像這樣

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

並且它對應於更大表中的一些行,我將其稱為attachments.

假設有一個縮寫表,看起來像

Abbreviation     Name
============     ====
B                Bashful
D                Dopey
DO               Doc
H                Happy
G                Grumpy
PC               Prince Charming
SB               Sleeping Beauty
S                Sleepy
SN               Sneezy

然後我想要一個表 ( abbreviations),其中包含在我的短通信列表中出現的縮寫列表。這看起來像

Abbreviation     Name
============     ====
DO               Doc
PC               Prince Charming
SB               Sleeping Beauty
SW               Snow White

類似於下面的查詢的東西大約可以工作。但是當它不匹配時,我也會得到空白輸出。我從 SQLite(或 LuaSQL,準確地說)收到錯誤,所以我想知道這是否是因為空白輸出。

更好(和更簡單)的方法受到讚賞。

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');
SELECT DISTINCT abbreviations.*
FROM attachments
JOIN abbreviations ON abbreviations.Abbreviation IN (attachments.`To`, attachments.`From`)
WHERE attachments.RowID IN ('2019.06.05',
                           '2019.06.11',
                           '2019.06.12',
                           '2019.06.15',
                           '2019.06.22');

?

引用自:https://dba.stackexchange.com/questions/242422