mysql矛盾查询同时运行

时间:2013-05-28 14:48:49

标签: mysql

我在解决如何构建特定查询的逻辑方面遇到了问题。

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

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

例如:

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的内容存在冲突,因此会被排除在外。但是,如果我可以将它们分开,那应该不重要。

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

3 个答案:

答案 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)
    )