【发布时间】:2012-02-21 12:21:24
【问题描述】:
所以我有一个带有列的表:
deck_id, card_name, quantity, board(irrelevent for this question)
每一行都有我需要的牌组 ID、牌名和上述牌的数量。
看起来像这样:
101, "cardofblahblah", 3, "main"
101, "differentcard", 2, "main"
102, "cardofblahblah", 1, "main"
102, "fictionalcard", 3, "main"
102, "madeupcard", 4, "main"
103, "magicalcard", 2, "main"
103, "trickcard", 3, "main"
...
...
这就是我的数据库的样子。我需要的是一个选择查询,它将返回包含我指定的所有卡片的卡片组的卡片组 ID,例如:我需要一个卡片组,其中包含 1 个“madeupcard”副本和 3 个“cardofblahblah”副本。那是我真正需要做的,但如果有人也提到我可以做 > 或
我知道如何进行查询,但编写这样一个复杂的查询让我很难过。
感谢你们提供的任何帮助。'
编辑: 澄清一下,我正在寻找包含我指定的所有卡片的卡片组的卡片组 ID。例如,“哪些套牌包含 3 份 cardofblahblah 和 1 份 madeupcard?”
我可以得到套牌 ID 的任何类型的输出都是好的。获取牌组 ID 是我最关心的问题。
编辑2: 在浏览了关于 SO 的各种其他主题后,我找到了解决方案。但是,我可能没有最有效的查询,所以如果有人能改进它,那就太好了。
SELECT table1.deck_id, table2.deck_id FROM decklist AS table1
JOIN (SELECT * FROM decklist WHERE card_name = "cardofblahblah" AND quantity = 3)
AS table2 ON table1.deck_id = table2.deck_id
WHERE table1.card_name = "madeupcard" AND quantity = 1;"
编辑3: 感谢 Telarian。他给了我一个更好的查询。
SELECT t.deck_id
FROM decklist t
INNER JOIN decklist l
ON l.deck_id = t.deck_id
WHERE (t.card_name = "madeupcard" AND t.quantity >= 1)
AND
(l.card_name = "cardofblahblah" AND l.quantity >= 3)
【问题讨论】:
-
至少在没有得到任何东西的时候尝试回到这里......
-
查看
sql-match-all标签,我已将其添加到您的问题中。这类问题已经回答过很多次了。 -
>= 运算符当然可以更改为您可能喜欢的任何其他运算符。不过,这似乎是您想要使用的那个。
标签: mysql sql database sql-match-all