需要帮助构建MySQL SELECT查询

时间:2012-01-29 06:44:21

标签: mysql sql database sql-match-all

所以我有一个包含列的表:

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份makeupcard?”

我能获得套牌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)

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

尝试以下代码

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

如果这是你想要的,请告诉我......