考虑一个名为carrecords的表,其结构如下:
名称(类型:TEXT) 价格(类型:INT) 颜色(类型:TEXT) vehicletype(类型:TEXT)例如。 SEDAN / SUV
客户希望查看符合其偏好的车辆的详细信息(名称,价格,颜色,车型)。这就是他所说的:
“如果它是黑色轿车,我准备支付10,000,但如果是红色或白色,那么不超过8,000。对于任何其他颜色,我不会超过7,000,除非它是一辆SUV,在哪种情况下,黑色的预算高达15,000或任何其他颜色高达14,000。“
编写一个查询,按价格的升序返回所需信息。
我的解决方案如下。
SELECT *
FROM carrecords
WHERE name='SEDAN'
AND color='black'
AND price=10000
UNION
SELECT *
FROM carrecords
WHERE name='SEDAN'
AND color='RED' OR color='WHITE'
AND price<=8000
UNION
SELECT *
FROM carrecords
WHERE name='SEDAN'
AND color!='BLACK'
AND price<=7000
UNION
SELECT *
FROM carrecords
WHERE name='SUV'
AND color='BLACK'
AND price<=15000
UNION
SELECT *
FROM carrecords
WHERE name='SUV'
AND color!='BLACK'
AND price<=14000
ORDER BY price;
答案 0 :(得分:1)
我认为值'SUV'和'SEDAN'在'type'列中,而不在'name'列中。另外,你可以像这样简洁地写出来:
SELECT *
FROM carrecords
WHERE (type='SEDAN'
AND ((color='BLACK'
AND price<=10000)
OR (color IN ('RED', 'WHITE')
AND price<=8000)
OR (color NOT IN ('BLACK', 'RED', 'WHITE')
AND price<=7000)))
OR
(type='SUV'
AND ((color='BLACK'
AND price<=15000)
OR (color != 'BLACK'
AND price<=14000))
ORDER BY price
答案 1 :(得分:0)
实际上,你可以在没有联盟的情况下做到这一点:
Select * from carrecords
where (type='Sudan' AND price <= 7000)
OR (type='Sudan' and color in ('Red','White') and price <= 8000)
OR (type='Sudan' AND color = 'Black' AND price <= 10000)
OR (type='SUV' and price <=14000)
OR (type='SUV' and color='Black' and price <=15000)
order by price