2016-02-07 2 views
3

У меня есть база данных стран и другая таблица, называемая зонами.mySQL update query on join

Countries 
[id, name, status (1 enabled 0 disabled) ] 


Zones 
[id, name, country_id] 

Я использую следующий запрос, чтобы соответствовать всем странам с их зоной.

select 
z.name as state, 
z.id as state_id, 
c.name as country_name, 
c.id as country_id, 
c.status as country_status 
from countries c left join zones z on c.id = z.country_id 

Таким образом, в основном короткая зона - это состояние, а выход - вот так.

+-----------------------------------------------------+----------+--- -----------------------------------------+------------+----------------+ 
| state            | state_id | country_name        | country_id | country_status  | 
+-----------------------------------------------------+----------+--- -----------------------------------------+------------+----------------+ 
| NULL            |  NULL | Christmas Island       |   45 |    1 
| NULL            |  NULL | Puerto Rico        |  172 |    1  
| NULL            |  NULL Isle of Man        |  254 |    1 
| Álava          |  2971 | Spain          |  195 |    1 
| Ávila          |  2976 | Spain          |  195 |    1 
| Évora          |  2656 | Portugal         |  171 |    1 

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

Я хочу, чтобы обновить статус на страны до 0, где нет зоны. Любая идея, как я могу это сделать через mySQL?

ответ

5

вы можете использовать not in так:

update Countries set status=0 where id not in (select distinct country_id from Zones) 
+0

Благодаря работал идеально. – limit