我在解决如何构建特定查询的逻辑方面遇到了问题。
我所拥有的是一种通过卧室数量,平方英尺等缩小房屋清单的表格。
我的问题是编写一个查询,其中包括城市和邮政编码参数以及房屋的详细信息。
例如:
SELECT * FROM my_houses
WHERE
BEDROOMS >= 3
AND
SQFT >= 1500
AND
CITY IN ('Gotham', 'Metropolis', 'Central')
VS
SELECT * FROM my_houses
WHERE
BEDROOMS >= 3
AND
SQFT >= 1500
AND
CITY IN ('Gotham', 'Metropolis', 'Central')
OR
ZIP IN ('65656', '65432', '63254')
现在,根据我的理解,当我使用OR
时,它不会将其他参数放在ZIP
上,因此它会显示所有带有ZIP
值的条目,而不管卧室数量。此外,城市和ZIP有点相互排斥,因此与符合CITY
值但不符合ZIP
的内容存在冲突,因此会被排除在外。但是,如果我可以将它们分开,那应该不重要。
有没有办法在不编写两个子查询的情况下解决这个问题?
答案 0 :(得分:2)
将OR与括号逻辑分组......类似......
WHERE
BEDROOMS >= 3
AND
SQFT >= 1500
AND
( CITY IN (Gotham, Metropolis, Central)
OR
ZIP IN (65656, 65432, 63254) )
但是,您的城市和ZIP值应该在引号中,例如
CITY IN ( 'Gotham', 'Metropolis', 'Central')
ZIP IN ('65656', '65432', '63254' )
答案 1 :(得分:0)
使用parens对您的或子句进行分组。这样,如果任何一个为真,它将满足AND
SELECT * FROM my_houses
WHERE
BEDROOMS >= 3
AND
SQFT >= 1500
AND
(
CITY IN (Gotham, Metropolis, Central)
OR
ZIP IN (65656, 65432, 63254)
)
答案 2 :(得分:0)
您可能缺少括号:)
SELECT * FROM my_houses
WHERE
BEDROOMS >= 3
AND
SQFT >= 1500
AND (
CITY IN (Gotham, Metropolis, Central)
OR
ZIP IN (65656, 65432, 63254)
)