У меня есть таблица 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
Просто добавьте дополнительное 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 ;
regexp ('10.10|10.11')
не означает диапазон. а как насчет 192.169.10.10 или192.10.11.255
или не так очевидно192.210.11
?