仅当子查询包含行时才查询

时间:2013-03-15 16:32:15

标签: mysql

好的,我在查询中内置了一个子查询。但是,如果子查询表(shop_stock)实际上有行,我希望这种情况发生。

SELECT id
FROM item
WHERE restocks_at = ?
AND rarity > ?
AND rarity < ?
AND price > 0
AND amount < (SELECT COUNT(id)
   FROM shop_stock
   WHERE item_id = item.id
   AND shop_id = ?)
ORDER BY rand()
LIMIT 1

我希望item表中的amount列只小于表(shop_stock)中包含该项ID的行,如果它实际上包含行。因为它没有开始的行,所以根本不会从查询中提取任何内容。 但是我循环了一下我想要插入多少项的循环,并且在一开始,它将在该表(shop_stock)中没有任何内容。

如果它从未在该表中插入该ID,则此查询将永远不会运行。所以我很困惑。我想基本上计算项目ID以及它在子查询中发生的程度,如果它甚至在表格中的话。

总的来说,每个项目都有一个金额(2-30),这意味着ITEM ID 21可能有5个意义,我只想要5个项目的MAX来补充该项目。所以我试图不做两个查询,我必须选择一个项目,然后检查它是否已经在shop_stock表中5次,如果不是,请将该项目插入shop_stock。

1 个答案:

答案 0 :(得分:0)

好吧,老实说,哇哇哇哇哇哇哇哇哇哇哇哇哇哇。 IF量&gt;什么已经在子查询表中,然后插入..不小于...:/抱歉..

SELECT id
FROM item
WHERE restocks_at = 1
AND rarity > 5
AND rarity < 60
AND price > 0
AND amount > (SELECT COUNT(id)
    FROM shop_stock
    WHERE item_id = item.id
    AND shop_id = 1)
ORDER BY rand()
LIMIT 1