SQL选择组和筛选器
以下数据位于数据库表中SQL选择组和筛选器,sql,Sql,以下数据位于数据库表中 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
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服务、Informix)
你可以试试这个<代码>具有可以扩展为其他颜色组合
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)
你可以试试这个<代码>具有可以扩展为其他颜色组合
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)
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
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
@vpk谢谢您的回答。但是我不能硬编码颜色。这些将在参数中传递。我应该在问题中提到。我将更新iti。我不明白为什么不能在此查询中使用参数。您可以在parameters@vpk,我弄错了。是的,我可以在查询中输入参数。我会再检查一遍。thanks@vpk谢谢你的回答。但是我不能硬编码颜色。这些将在参数中传递。我应该在问题中提到。我将更新iti。我不明白为什么不能在此查询中使用参数。您可以在parameters@vpk,我弄错了。是的,我可以在查询中输入参数。我会再检查一遍。感谢您不能只使用SQL,对所有DBMS都可用,然后说您不需要硬编码值。那三个人不结婚。必须有某种方法来传递这些值,要么是在代码中(在vkp提供的SQL中注入参数),要么是某种存储过程(MSSQL)。不能只使用SQL,对所有DBMS都可用,然后说不需要硬编码的值。那三个人不结婚。必须有某种方法来传递这些值,它要么在代码中(在vkp提供的SQL中注入参数),要么在某种存储过程中(MSSQL)。