2014-02-03 2 views
0

У меня есть таблица mysql со страной, штатом, городом и населенным пунктом. Я хочу получить только те страны, которые имеют либо город, либо местность как нулевые или пустые. Я попробовал этот запрос:получить конкретные записи на основе того, где условие

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

В принципе нужно извлечь все страны, в которых либо город или значение местонахождения пуст. Этот запрос дает мне несколько стран, которые имеют город и местность как в том же ряду. Что я делаю не так? Это дает мне страны, которые имеют город и местность как ценности.

Мне нужен список стран, в которых нет города или населенного пункта, что означает, что все города или населенные пункты страны пустые или нулевые. Не хотите, чтобы страна, если даже одна запись страны имеет либо город, либо местность.

+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.

EDIT:

Если вы хотите запрос, где все значения пусты или 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; 
+0

Обновлен мой вопрос. –

+0

Это дает мне все страны, где даже в одной записи есть город или местность, пустая из всех записей. В этом случае сумма всегда будет больше 0. –

+0

Редактирование вашего вопроса явно требует: «Мне нужен список стран, в котором нет города или населенного пункта, что означает, что все города или населенные пункты страны пустые или нулевые. Не хотите, чтобы страна, если даже одна запись страны имеет либо город, либо местность ». –

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 
+0

обновил мой вопрос. –

+0

@CM Обновляя свой вопрос, этот SO-сообщение теперь не имеет правильной структуры вопросов/ответов. Я проголосовал за закрытие. –

+0

@JanDoggen - В этом случае следует добавить еще один вопрос? –

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

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

+0

обновил мой вопрос. –

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 значение никогда не может содержать значение ''. Если у вас есть значение int в city или Locality

Смежные вопросы