查询组件和聚合
Query on both component parts and aggregation
我正在使用 sqlite3。我更愿意继续使用它,但转换并非不可能。
我有两个表:
card face
---- ----
id id
card_id
name
position
A card
在 face
中有一个或多个条目。
卡片的规范名称是其面的名称按 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
我正在使用 sqlite3。我更愿意继续使用它,但转换并非不可能。
我有两个表:
card face
---- ----
id id
card_id
name
position
A card
在 face
中有一个或多个条目。
卡片的规范名称是其面的名称按 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