Итак, у меня есть таблица с колонками:
deck_id, card_name, quantity, board(irrelevent for this question)
В каждой строке есть идентификатор колоды, который мне нужен, название карты и количество вышеупомянутых карт.
Это будетвыглядит примерно так:
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"
...
...
Так выглядит моя база данных.Мне нужен запрос на выбор, который будет возвращать идентификатор колоды, которая содержит все карты, которые я указал, например: мне нужна колода, которая содержит 1 копию "madeupcard" и 3 копии "cardofblahblah".Это то, что мне действительно нужно сделать, но было бы здорово, если бы кто-то также упомянул, как я могу сделать> или <вместо того, чтобы просто устанавливать сумму. </p>
Я знаю, как выполнять запросы, но писать сложныеодна такая, что поставила меня в тупик.
Спасибо за любую помощь, которую вы, ребята, можете предложить. '
РЕДАКТИРОВАТЬ: Просто чтобы уточнить, я ищу колоды идентификаторов колод, которые содержат все карты, которые яуточнить.Например, «какие колоды содержат 3 копии карты и 1 копию готовой карты?»
Любой вид вывода, где я могу получить идентификатор колоды, хорош.Получение идентификатора колоды является для меня главной заботой.
РЕДАКТИРОВАТЬ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;"
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)