mysql多个IN子句由AND子句链接在同一个字段中

时间:2013-06-17 22:40:30

标签: mysql

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

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

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

1 个答案:

答案 0 :(得分: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即可解决。