我正在使用sqlite3。我宁愿继续使用它,但切换不是不可能的。
我有两张桌子:
card face
---- ----
id id
card_id
name
position
card
在face
中有一个或多个条目。
卡片的规范名称是position
订单中与“//”连接的面孔名称。
示例牌:'Dark Ritual',一张名为'Dark Ritual'的单张牌。 “研究//发展”,一张名为“研究”和“发展”的两张面孔的卡片
无论搜索字词是规范名称还是其中一张卡片的名称,我如何编写一张能够找到卡片详细信息的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 (?)
这找到了我正在寻找的卡片? =规范名称('研究//开发'。)当我提供只有一个面(“黑暗仪式”)或第二个的卡片名称时,它也会找到我要找的东西。两个名字('发展')。当我提供两个面名中的第一个('研究')时,它不工作。我知道外部查询可以“看到”两个名称,因为它们都存在于名称的GROUP_CONCAT形式中。但查询第一个面部名称在HAVING中不起作用。
你能帮我理解为什么吗?谢谢!答案 0 :(得分:1)
试试这个版本:
HAVING SUM(CASE WHEN name IN (?) THEN 1 ELSE 0 END) > 0
请注意参数与列表不匹配。如果要传入逗号分隔列表,可以尝试:
HAVING SUM(CASE WHEN ',' || name || ',' LIKE '%,' || ? || ',%' THEN 1 ELSE 0 END) > 0