0

我需要整理一个查询,而不是给我所有具有不同装饰的版本。每个修剪类型可以由多个修剪 ID 定义。

我在下面的尝试是说:给我所有具有任何类型的电动车窗和手动空调以及任何类型的安全气囊等的版本。

AND 子句的数量取决于用户输入。

当然,这个查询不起作用。实际上它有效,但给了我一个空的结果集。

谢谢你的帮助。

SELECT *
FROM vprice_range
INNER JOIN versiontrim USING ( version_id )
WHERE versiontrim.trim_id IN ( 139, 152, 237, 265, 266 ) == types of power window
AND versiontrim.trim_id IN ( 39 )  == manual air conditioner
.....
AND versiontrim.trim_id IN (45, 55, 154)  == types of air bags
GROUP BY version_id
4

1 回答 1

1

你是对的,你需要两个查询之一......你的偏好选择。一个版本是使用多个别名,另一个是基于计数。就我个人而言,我更喜欢多个连接:

    SELECT 
          PR.*
       FROM 
          vprice_range PR
             JOIN versiontrim Windows
                on PR.Version_ID = Windows.Version_ID
               AND Windows.Trim_ID IN ( 139, 152, 237, 265, 266 )

             JOIN versiontrim HasAir
                on PR.Version_ID = HasAir.Version_ID
               AND HasAir.Trim_ID IN ( 39 )

             JOIN versiontrim AirBags
                on PR.Version_ID = AirBags.Version_ID
               AND AirBags.Trim_ID IN ( 45, 55, 154 )
   group by
      PR.Version_ID

您按版本分组,但基于 SQL 引擎(MySQL、SQL-Server、Oracle 等),您可能对其他列有问题……您可能只需要 DISTINCT PR.Version_ID 即可解决。

于 2013-06-18T01:16:31.507 回答