查询组件和聚合

Query on both component parts and aggregation

我正在使用 sqlite3。我更愿意继续使用它,但转换并非不可能。

我有两个表:

card      face
----      ----
id        id
          card_id
          name
          position

A cardface 中有一个或多个条目。

卡片的规范名称是其面的名称按 position 顺序与“//”连接。

示例牌:'Dark Ritual',一张牌面为 'Dark Ritual'。 'Research // Development',一张有两张脸的卡片,名字分别是 'Research' 和 'Development'

我如何编写 SELECT 来查找卡片的详细信息,而不管搜索词是规范名称还是其中一张卡片的名称?

这是我得到的结果:

SELECT id, GROUP_CONCAT(name, ' // ') 
FROM 
    (SELECT c.id, f.name
    FROM card AS c
    INNER JOIN face AS f ON c.id = f.card_id
    ORDER BY f.card_id, f.position)
GROUP BY id
HAVING GROUP_CONCAT(name, ' // ') IN (?)
OR name IN (?)

这会在什么时候找到我要找的卡片? = 规范名称 ('Research // Development'.) 当我提供只有一张牌面 ('Dark Ritual') 或 second 的两个面孔名称 ('Development')。当我提供两个人脸名称中的第一个 ('Research') 时,它 not 起作用。我知道外部查询可以 'see' 这两个名称,因为它们都以名称的 GROUP_CONCAT 形式存在。但是查询第一个面孔名称在 HAVING 中不起作用。

你能帮我理解为什么吗?谢谢!

试试这个版本:

HAVING SUM(CASE WHEN name IN (?) THEN 1 ELSE 0 END) > 0

请注意参数不能匹配列表。如果你想传入一个逗号分隔的列表,你可以试试:

HAVING SUM(CASE WHEN ',' || name || ',' LIKE '%,' || ? || ',%' THEN 1 ELSE 0 END) > 0