结果在同一列和另一列的条件

时间:2017-09-01 11:45:02

标签: php mysql

我有一张如下表格

bundle_id

我需要在同一列AND上使用asset_id操作获取SELECT bundle_id FROM mac.bundle_prices WHERE asset_id =2 and asset_id=1 and asset_id =4 and price_id =1 GROUP BY bundle_id SELECT bundle_id FROM mac.bundle_prices WHERE asset_id IN ('2', '1','4') and price_id =1 GROUP BY bundle_id = 1的结果。

我正在尝试下面的查询,但都没有。

{{1}}

请提出任何建议!

4 个答案:

答案 0 :(得分:0)

您可以使用检查所有asset_id匹配

select bundle_id
from  mac.bundle_prices 
WHERE asset_id IN (2, 1,4)
group by bundle_id
having count(distinct asset_id) = 3

我认为asset_id类型是数字

如果你想要bundle_id 2,使用asset_id你应该使用

select bundle_id
from  mac.bundle_prices 
WHERE asset_id IN (2, 3)
group by bundle_id
having count(distinct asset_id) = 2

答案 1 :(得分:0)

你可以使用这个sql

SELECT bundle_id
FROM mac.bundle_prices
WHERE asset_id IN ('2', '1','4') and  price_id =1 
GROUP BY asset_id

答案 2 :(得分:0)

从您的评论中我认为您需要与asset_id相同的bundle_id。请尝试以下查询

SELECT bundle_id
FROM mac.bundle_prices
WHERE asset_id IN (2, 1,4) and  price_id =1 AND asset_id = bundle_id
GROUP BY bundle_id

答案 3 :(得分:0)

英语很乱。在英语中,“和”可以表示“或”。但在任何数学或计算机领域,它都而不是

asset_id IN (2, 1, 4)表示asset_id = 2 OR asset_id = 1 OR asset_id = 4不是 asset_id = 2 and asset_id = 1 and asset_id = 4。想一想。 asset_id只有一个值;它不能同时为=2 =1。但它可以是“2”“1”。

另一方面,也许您会问“是否有3行具有不同的asset_id值?具体来说,是2,1,4。”

因此,我们需要找到price_id =1的所有行,然后查看找到的asset_id个值。有两种方式......

SELECT bundle_id,
       GROUP_CONCAT(asset_id ORDER BY asset_id) AS list
    FROM bundle_prices
    WHERE price_id = 1
    GROUP BY bundle_id
    HAVING list = "1,2,4";  -- (this order matters)

但这有潜在的缺陷。如果第4行有asset_id = 7怎么办?这很容易解决:

SELECT bundle_id,
       GROUP_CONCAT(asset_id ORDER BY asset_id) AS list
    FROM bundle_prices
    WHERE price_id = 1
      AND asset_id IN (2,1,4)  -- (this order does not matter)
    GROUP BY bundle_id
    HAVING list = "1,2,4";

另一种方法也使用HAVING,但方式不同:

SELECT bundle_id
    FROM bundle_prices
    WHERE price_id = 1
      AND asset_id IN (2,1,4)
    GROUP BY bundle_id
    HAVING COUNT(*) = 3  -- exactly all 3 values

此技术的优点是通过将最后一行更改为HAVING COUNT(*) >= 2来回答“哪个bundle_id至少有2个(2,1,4)”。