MySQL, ГДЕ НЕ СУЩЕСТВУЕТ, не работает - PullRequest
0 голосов
/ 15 мая 2018

У меня есть две таблицы, одна с именем st_grid, в которой есть футбольные матчи, и другая таблица st_compiled, которая по сути является копией st_grid, но процесс помещения строки в st_compiled довольно интенсивный, поэтому я хочу поместить данные в один ряд за один раз. Вот две таблицы с соответствующими столбцами:

  1. st_grid
    • ID
    • league_id
    • fixture_date
  2. inplay_fixture_compiled
    • inplay_fixture_compiled_id
    • grid_id

Я хочу выбрать строку из st_grid, где нет соответствующей строки в st_compiled ON grid_id, но мне не повезло. Я просмотрел различные запросы и пробую этот

                    SELECT g.id
                    FROM st_grid g
                    WHERE NOT EXISTS
                                (SELECT i.grid_id
                                FROM inplay_fixture_compiled i
                                WHERE g.id = i.grid_id)
                    AND g.league_id = '15'

Но это не работает, все, что происходит, это то, что страница зависает в течение нескольких минут, когда я пытаюсь запустить ее. В st_grid есть около 170 000 строк (но для каждого league_id будет не более 600 строк) и 10000 в st_compiled, но я не верю, что это огромное количество любыми способами.

Надеюсь, что это имеет смысл, любая помощь высоко ценится. P

Ответы [ 2 ]

0 голосов
/ 15 мая 2018
 SELECT g.grid_id
 FROM st_grid g
 LEFT JOIN inplay_fixture_compiled i ON (g.id = i.grid_id) 
 WHERE g.league_id = '15' and i.grid_id is null.

Вы можете объединить эти таблицы с ключевым словом LEFT JOIN и отфильтровать NULL, но это, вероятно, будет менее эффективно, чем использование NOT EXISTS.

0 голосов
/ 15 мая 2018

Почему бы вам не попробовать объединиться, чтобы получить все данные в st_grid, которых еще нет в st_compiled.

Например,

select grid_id 
from st_grid t1 
left join st_compiled t2 on t1.grid_id = st_compiled.grid_id 
where t2.grid_id is null
...