MySQL слишком длинный запрос - PullRequest
3 голосов
/ 14 февраля 2010

У меня проблема с этим 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, и там написано ЗАВИСИМОЕ ОТПРАВЛЕНИЕ, поэтому второй выбор воспроизводится для каждого выбора в городах, но я думаю, что это бесполезно.

Есть ли в mysql или другом сервере sql способ, который может это разрешить?

Или, может быть, завершить другой запрос.

Идея состоит в том, что если в городе нет традукции, название города должно быть записано в таблице традукции. Тогда мне просто нужно посмотреть в таблице traduction, а не в таблице city.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2010

Вы можете попробовать что-то вроде этого

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 и towns.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 
                    )
);
0 голосов
/ 14 февраля 2010

Вы модифицируете таблицу traduction, поэтому результаты внутреннего подзапроса не могут быть повторно использованы

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