0

我在解决有关如何构建特定查询的逻辑时遇到问题。

我所拥有的是一种表格,可以通过卧室数量、平方英尺等来缩小房屋清单的范围。

我的问题是编写一个查询,其中包括城市和邮政编码参数以及房屋的详细信息。

例如:

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值但不满足 a 的东西发生冲突ZIP,因此会被排除在外。但是,如果我可以将它们分开,那应该没关系。

有没有办法在不编写两个子查询的情况下解决这个问题?

4

3 回答 3

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' )
于 2013-05-28T14:52:30.507 回答
0

使用括号对 or 子句进行分组。这样,如果其中任何一个为真,它将满足AND

SELECT * FROM my_houses 
WHERE 
    BEDROOMS >= 3 
AND 
    SQFT >= 1500 
AND
(
    CITY IN (Gotham, Metropolis, Central)
OR
    ZIP IN (65656, 65432, 63254)
)
于 2013-05-28T14:52:45.097 回答
0

您可能缺少括号:)

SELECT * FROM my_houses 
WHERE 
    BEDROOMS >= 3 
AND 
    SQFT >= 1500 
AND (
    CITY IN (Gotham, Metropolis, Central)
    OR
    ZIP IN (65656, 65432, 63254)
    )
于 2013-05-28T14:52:58.310 回答