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)。