0

我在 SQLite 中有 2 个表 A 和 B

A:

Name|Badge
----------
ABC |X
XYZ |Y

乙:

ListCode |Badges
--------------------
V        |'X','Y','Z'

我想做这样的事情:

SELECT * FROM A WHERE BADGE IN (SELECT BADGES FROM B WHERE LISTCODE = 'V');

问题是 SELECT IN 似乎不像另一个表中的文字 csv 那样工作。我怎样才能做到这一点 ?

4

1 回答 1

0

这里的故事的寓意是不要像你一直在做的那样存储 CSV 数据。此答案假定您实际上存储的是未引用的CSV 数据,即:

X,Y,Z

话虽如此,您可以使用以下查询来解决此问题:

SELECT A.*
FROM A
INNER JOIN B
    ON A.BADGE = B.BADGES OR
       B.BADGES LIKE A.BADGE || ',%' OR
       B.BADGES LIKE '%,' || A.BADGE || ',%' OR
       B.BADGES LIKE '%,' || A.BADGE
WHERE
    B.BADGES IS NOT NULL

这是上述查询的演示。它在 MySQL 中是因为 Rextester 不支持 SQLite 但逻辑和数据是相同的。

演示

于 2017-09-17T04:33:47.230 回答