我需要整理一个查询,而不是给我所有具有不同剪裁的版本。每个修剪类型可以由几个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
答案 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即可解决。