我有一张如下表格
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}}
请提出任何建议!
答案 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)”。