Как бы я вернуть все нулевые значения из левого соединения? - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь объединить две таблицы (A и B) слева и хотел бы вернуть все значения, столбец которых в таблице B помечен как нулевой в mySQL.

Обе таблицы, к которым я присоединяюсь, очень велики, и у меня возникает проблема, из-за которой время соединения истекает через 6000 секунд из-за настроек СУБД; Есть ли способ сделать этот запрос более эффективным?

Еще один бит информации: даже если я ограничу запрос до 10 строк, он все равно прекратит работу и выдаст мне код ошибки, указанный ниже.

select * 
from Table_A a
left join Table_B b
on a.field_X = b.field_X
where b.Field_X is null;

У меня возникает следующий код ошибки: «Код ошибки 2013. Потеря соединения с сервером MySQL во время запроса».

Примечание: я новичок в SQL, и мне, возможно, потребуется уточнить некоторые ответы. Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 30 мая 2019

Может быть, что-то вроде этого будет работать для вас:

    select * from table_A a where a.field_X not in (select field_x from table_B);
0 голосов
/ 30 мая 2019

Попробуйте наоборот и уменьшите поля SELECT, если можете:

select Table_B.Field_X 
from Table_B b
left join Table_A a
on a.field_X = b.field_X
where a.Field_X is null;

Пусть SQL выполняет свою работу так, как ему нравится :) Чтобы иметь стандартное левое соединение (где вы ищете строки, которые не совпадают справа), очень оптимизируется, если у вас правильные индексы

0 голосов
/ 29 мая 2019

Во-первых, вам нужны только столбцы из a, потому что все столбцы b - это null.Вы можете написать это как:

select a.* 
from Table_A a left join
     Table_B b
     on a.field_X = b.field_X
where b.Field_X is null;

Тогда для этого запроса я рекомендую индекс для table_b(field_x).

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