Mysql текущая версия не поддерживает «LIMIT & IN / ALL / ANY / SOME subquery»

0

У меня есть таблица table1 o_id как PK, host, b_id

o_id    host              b_id
9205    host1.abc.com     null
9206    host2.abc.com     null
9207    host3.abc.com     null

---more, чем 1000 строк

У меня есть другая таблица table2 id как PK, hostname, b_id

id      hostname              o_id   ip
18356   host1                 null   10.10.10.10
18357   host2                 null   10.11.11.11
18358   host3                 null   10.12.12.12

---more, чем 1000 строк

Теперь, если hostname(excluding domain name) совпадает в обеих таблицах и ip адресе в диапазоне ('10.10|10.11'), тогда я хочу обновить обе таблицы так, чтобы table2.o_id = table1.o_id и table1.b_id = table2.id

update table1 T1
inner join table2 T2 on T2.hostname = substring_index(T1.host, '.', 1)
set T2.o_id = T1.o_id , 
    T1.b_id = T2.id
where T1.b_id IS NULL AND
 T2.ip IN (select ip from table2 where ip regexp ('10.10|10.11')
limit 10); 

Здесь я хочу обновить o_id во второй таблице из o_id в первой таблице. Я также хочу обновить b_id в первой таблице с id во второй таблице.

Здесь я получаю сообщение error

Error Code: 1235. This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Я использую MYSQL Versin 6.0

Теги:
sql-update
join
inner-join

1 ответ

3
Лучший ответ

Просто добавьте дополнительное join а не in:

update table1 T1 inner join
       table2 T2 
       on T2.hostname = substring_index(T1.host, '.', 1) join
       (select distinct ip
        from table2
        where ip regexp ('10.10|10.11')
        limit 10
       ) t3
       on t2.ip = t3.ip
set T2.o_id = T1.o_id , 
    T1.b_id = T2.id
where T1.b_id IS NULL ;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню