我已经有了一个有效的解决方案,但我正在寻找一种更快或更好的方法。
key column | fruit | quantity
------------------------------
11111 apple 100
11111 melon 50
11111 banana 75
22222 apple 200
22222 cherry 100
22222 banana 10
33333 apple 90
33333 melon 60
33333 lemon 200
我想看看哪个关键栏目的水果'和'数量'满足我的条件。
我的解决方案:
SELECT
a1.[key column]
FROM
products a1,
products a2,
products a3
WHERE
(a1.fruit = 'apple' and a1.quantity > 95) and
(a2.fruit = 'melon' and a2.quantity > 40) and
(a3.fruit = 'banana' and a3.quantity > 60) and
(a1.[key column] = a2.[key column]) and
(a1.[key column] = a3.[key column])
当所有条件都满足时,它们都共享相同的[关键列],结果将是:11111
如果我理解正确的话,我所做的就是加入同一张桌子3x。它已经很快了,但是这个表包含500k行,我希望有更多的条件。如果我有10个条件,我不确定加入同一个表10次是多么聪明。
答案 0 :(得分:1)
一种简单方法使用group by
和having
:
SELECT p.[key column]
FROM products p
WHERE (p.fruit = 'apple' and p.quantity > 95) or
(p.fruit = 'melon' and p.quantity > 40) or
(p.fruit = 'banana' and p.quantity > 60)
GROUP BY p.[key column]
HAVING COUNT(DISTINCT fruit) = 3;
这是否更快,您的方法取决于数据库,数据大小和索引。但是,这种方法在性能上是一致的。 。 。因此添加更多条件对性能几乎没有影响。
答案 1 :(得分:1)
我认为你不需要加入。试试这个
SELECT DISTINCT [key column]
FROM
products
WHERE quantity > CASE fruit WHEN 'apple' THEN 95
WHEN 'melon' THEN 40
WHEN 'banana' THEN 60 END