MySQL和/或查询几个表之间的高级搜索

时间:2015-03-09 03:51:24

标签: mysql

现在,我正在使用此查询

    SELECT h . * , 

    (SELECT state
      FROM house_name
      WHERE name = h.house_name
      AND purpose = h.purpose
      AND district_id = (
       SELECT id
       FROM district
       WHERE name = h.district )
       LIMIT 1
    ) AS hstate, 

    (SELECT name
     FROM district
     WHERE id = (
     SELECT district_id
     FROM house_name
     WHERE name = h.house_name
     LIMIT 1 )
     LIMIT 1
    ) AS origin_d, 

    (SELECT id
     FROM house_name
     WHERE name = h.house_name
     AND purpose = h.purpose
     AND district_id = (
     SELECT id
     FROM district
     WHERE name = h.district )
     LIMIT 1
    ) AS hnameid, 

    m.display_name
    FROM house_detail h
    LEFT JOIN members m ON m.id = h.member_id
    WHERE 

    h.deleted =0
    AND h.approve =0
    AND 
    (SELECT state
    FROM house_name
    WHERE state = 'N'
    AND name = h.house_name
    AND purpose = h.purpose
    AND district_id = (
    SELECT id
    FROM district
    WHERE 
    name = h.district )
    LIMIT 1
    ) IS NOT NULL
    AND h.price <=1000000
    OR h.price >=70000000
    OR (
    h.purpose = 'house'
    AND h.rent >=100000
    )
    OR (
    h.purpose = 'industry'
    AND h.rent >=700000
    )
    OR h.rent <=5000

在Where子句中:

  1. h.approve可以是0或1或2
  2. h.deleted可以是0或1
  3. 状态可以是Y或N
  4. 我想做的是:

    1. h.deletedh.approvestate必须分别为00N
    2. h.renth.price可能在特定范围内。
    3. 目前的问题是它仍然会选择h.deletedh.approvestate可能是1 or 21和{{1}的一些数据}}。我认为这是因为他们之间有一些Y

      有没有办法输出我的预期结果?

1 个答案:

答案 0 :(得分:0)

围绕以下陈述设置括号:

WHERE 
name = h.district )
LIMIT 1
) IS NOT NULL
AND (h.price <=1000000
OR h.price >=70000000
OR (
h.purpose = 'house'
AND h.rent >=100000
)
OR (
h.purpose = 'industry'
AND h.rent >=700000
)
OR h.rent <=5000)

在最后(之后打开AND并在结束时关闭) ...应该这样做