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、除外されます。しかし、それらを切り離すことができれば、それは問題ではありません。

2 つのサブクエリを書かずにこれを回避する方法はありますか?

4

3 に答える 3

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 に答える