以下数据位于数据库表
中Color MADE MODEL REG
----- ---- ----- ----
Red TOYOTA CAR EN-9082 *
Yellow TOYOTA CAR YR-4356 *
Red TOYOTA JEP AX-4566
Yellow TOYOTA SUV AX-4343
Yellow NISSAN CAR ER-0873
Yellow HONDA SUV AS-6453 * ^
Red HONDA SUV SD-9853 * ^
Blue HONDA SUV AS-9762 ^
我必须编写一个代码来提取由' *'表示的记录。 (当没有聚合时,只有过滤它们)颜色'红色'和'黄色'传入。
同样,如果我传递颜色'红色'黄色'和'蓝'我需要' ^'
指示的记录换句话说,我需要记录,其中所有传递的颜色都可用于Made和Model组合。
另一方面,我不能在SQL中使用颜色名称。它们被传递到我的程序中,我无法控制它们。
是否可以编写理想情况下使用纯SQL的SQL。我需要针对多个数据库(例如Oracle,SQL Service,Informix)执行它
Ish
答案 0 :(得分:2)
你可以试试这个。 having
可以扩展为其他颜色组合。
select *
from tablename
where made in (select made
from tablename
group by made
having count(case when color in ('Red','Yellow') then 1 end) >= 2)
答案 1 :(得分:0)
vkp的答案基本上是正确的。我认为它更简单地写成:
select t.*
from tablename t.
where made in (select t2.made
from tablename t2
where t2.color in ('Red', 'Yellow')
group by t2.made
having count(*) = 2
);
如果允许重复,则having
子句应为count(distinct color) = 2
。