我有这个mysql查询的问题。它需要花费1天才能执行...
查询是:
INSERT INTO traduction
(traduction.`id`,traduction.`traduction`,traduction.`language`,traduction.`type`)
(
SELECT cities.id,cities.name, '', 'city' FROM cities
WHERE cities.id NOT IN
(
SELECT traduction.`id` FROM traduction WHERE traduction.type='city' GROUP BY id
)
);
我在2选择上做了一个扩展解释,然后说DEPENDENT SUBQUERY,所以第二个选择是针对城市的每个选择进行的,但我认为它没用。
在mysql或其他sql server中有一种方法可以允许吗?
或者也许是complet其他查询。
这个想法是,如果一个城市没有一个转义,城市名称应该写在traduction表中。然后我只需要看看traduction表而不是城市表。
答案 0 :(得分:2)
您可以尝试这样的事情
INSERT INTO traduction
(traduction.`id`,traduction.`traduction`,traduction.`language`,traduction.`type`)
(
SELECT cities.id,
cities.name,
'',
'city'
FROM cities LEFT JOIN
(
SELECT traduction.`id`
FROM traduction
WHERE traduction.type='city'
GROUP BY id
) s ON cities.id = s.id
WHERE s.ID IS NULL
);
同时确保您的表上有正确的索引,例如 traduction.type或traduction.id和cities.id
INSERT INTO traduction
(traduction.`id`,traduction.`traduction`,traduction.`language`,traduction.`type`)
(
SELECT cities.id,
cities.name,
'',
'city'
FROM cities LEFT JOIN
(
SELECT DISTINCT
traduction.`id`
FROM traduction
WHERE traduction.type='city'
) s ON cities.id = s.id
WHERE s.ID IS NULL
);
编辑:不存在
INSERT INTO traduction
(traduction.`id`,traduction.`traduction`,traduction.`language`,traduction.`type`)
(
SELECT cities.id,
cities.name,
'',
'city'
FROM cities
WHERE NOT EXISTS (
SELECT DISTINCT
traduction.`id`
FROM traduction
WHERE traduction.type='city'
AND cities.id = traduction.id
)
);
答案 1 :(得分:0)
您正在修改traduction表,这就是内部子查询的结果无法重用的原因