-1

所以我有一个带有列的表:

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 是我最关心的问题。

EDIT2:在浏览了有关 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;"

EDIT3:感谢 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)
4

2 回答 2

2

这似乎过于复杂了......

以下查询不会给您想要的吗?

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)
于 2012-01-29T10:38:52.957 回答
0

试试下面的代码

SELECT *
FROM myTable
WHERE ((board='madeupcard' AND quantity=1) OR (board='cardofblahblah' AND quantity=3))

让我知道这是否是你想要的......

于 2012-01-29T06:51:51.770 回答