一重引用符を使用していることを除いて、クエリに問題はありません。
INSERT INTO topics (personID)
SELECT personID FROM persons where personID = 1
MySQL で予約語を使用している場合は、名前を囲むためにバッククォート ` (通常はキーボードの 1 の隣) を使用する必要があります。
次の例を参照してください。
mysql> select * from test1;
+------+-------+
| id | varry |
+------+-------+
| 1 | aaa |
+------+-------+
1 row in set (0.07 sec)
mysql> select * from test2;
+------+-------+-------+
| id | barry | third |
+------+-------+-------+
| 1 | ccc | NULL |
| NULL | d | 1 |
| NULL | d | 2 |
| NULL | d | 3 |
+------+-------+-------+
4 rows in set (0.00 sec)
mysql> insert into test1 (id) select id from test2 where barry='ccc';
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into test1 ('id') select 'id' from test2 where barry='ccc';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near ''id')
select 'id' from test2 where barry='ccc'' at line 1
mysql>