根据条件获取具体记录

时间:2014-02-03 12:13:24

标签: mysql sql

我有一个包含国家,州,城市和地区的mysql表。我想只获得那些城市或地区为空或空的国家。我试过这个问题:

select distinct country from xyz where state != "" and ((city="" and Locality="") or (city="" and Locality!="") or (city!="" and Locality="")) order by country

基本上需要获取城市或地区值为空的所有国家/地区。这个查询给了我很少的国家,这些国家的城市和地区都在同一行。我究竟做错了什么?它给了我拥有城市和地方两个价值观的国家。

我需要没有城市或地区的国家/地区列表,这意味着该国家/地区的所有城市或地区都为空或无效。如果该国的一个记录有城市或地方价值,则不要想要国家。

5 个答案:

答案 0 :(得分:1)

您是否正在寻找一个简单的or

select distinct country
from xyz
where state <> '' and
      (city = '' or Locality= '')
order by country;

如果这不能返回您想要的内容,则可能会遇到NULL值的问题:

select distinct country
from xyz
where state <> '' and
      (city = '' or Locality= '' or city is null or Locality is null)
order by country;

或者可能不需要state上的条件。

顺便说一下,对于SQL中的字符串常量,你应该使用单引号而不是双引号。

编辑:

如果您想要查询 all 的值为空或NULL给定国家/地区,请使用聚合和having子句:

select country
from xyz
group by contry
having min(city = '' or Locality= '' or city is null or Locality is null) > 0
order by country;

答案 1 :(得分:1)

select distinct country
from xyz
where state != ""
and (city="" or Locality="")

答案 2 :(得分:0)

需要使用or代替and

select distinct country from xyz where state <> "" and (city="" or city is null or Locality="" or Locality is null) order by country

答案 3 :(得分:0)

select distinct country from xyz where (state != "" and (city="" OR Locality=""))

答案 4 :(得分:0)

尝试使用IsNull属性。

SELECT DISTINCT country
FROM xyz
WHERE state <> '' AND
  (city = '' OR Locality= '' OR city IS NULL OR Locality IS NULL)
ORDER BY country;

int值永远不能包含值''。如果intcity

中有任何Locality