Sql left join по левой клавише с нулевыми значениями

У меня вопрос о соединении с ключом с нулевым значением.

Предположим, у меня есть таблица t, которая будет слева. (id - это первичный ключ, а sub_id - ключ для соединения с правой таблицей.)

    id sub_id value
    1  3       23
    2  3       234
    3  2       245
    4  1       12
    5  null    948
    6  2       45
    7  null    12

и у меня есть еще одна таблица m, которая находится справа. (t.sub_id = m.id)

    id feature
    1  9       
    2  8       
    3  2       
    4  1       
    5  4    
    6  2       
    7  null

Теперь я хочу использовать

    select * from t left join m on t.sub_id = m.id   

Какой результат он вернет? Влияет ли значение Null в левой клавише на результат? Я хочу, чтобы все строки левых клавиш null не отображались в моем результате.

Спасибо!

I want all null left key rows not to shown in my result. Тогда вы не хотите использовать LEFT JOIN. Здесь уместно использовать обычный JOIN (внутреннее соединение).
Cᴏʀʏ 31.07.2018 20:29

LEFT JOIN будет включать все, что указано в левой таблице. Думаю, вам может понадобиться INNER JOIN.

mypetlion 31.07.2018 20:30

Вы можете протестировать.

paparazzo 31.07.2018 20:30

Почему бы вам самому не попробовать, а не спросить здесь ???

Eric 31.07.2018 20:46

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

philipxy 01.08.2018 11:42
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
5
26 628
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

left join довольно прост. Он сохраняет все строки в первой (левой) таблице плюс все строки во второй (правой) таблице, когда предложение on оценивается как «истина».

Когда предложение on оценивается как «ложь» или NULL, left join по-прежнему сохраняет все строки в первой таблице со значениями NULL для второй таблицы.

Если sub_id или id - это NULL, тогда ваше предложение on оценивается как NULL, поэтому оно сохраняет все строки в первой таблице с заполнителями NULL для столбцов во второй.

Левое соединение по определению будет включать в себя все идентификаторы из левой части соединения, независимо от того, имеет ли идентификатор действительное сопоставление в другой таблице; в противном случае он будет связан с NULL.

Если вы хотите использовать только действительные ссылки, вам необходимо использовать INNER JOIN.

Я думаю, что inner join не является решением, потому что в right есть ключи, и он не хочет, чтобы они были в объединенной таблице. Вы все еще можете сделать left join, а затем добавить оператор, чтобы удалить все keys = null

ты можешь попробовать это

SELECT * 
FROM t 
LEFT JOIN m ON t.sub_id = m.id
WHERE t.sub_id != NULL

или же

SELECT * 
FROM t 
LEFT JOIN m ON t.sub_id = m.id  
WHERE t.sub_id IS NOT NULL 

У вас отключен синтаксис. Либо переместите LEFT JOIN ... в предложение FROM, либо поместите SELECT ... WHERE ... в подзапрос, присоединитесь к нему и поместите вокруг него внешний запрос. Что бы вы ни планировали.

sticky bit 31.07.2018 21:32

Вы сохраните все результаты из левой таблицы. Имейте в виду, если у вас есть значение null в левой таблице, это (null) не будет оцениваться [null = null не является допустимым выражением]

Left table
id value
1  1
2  null

Right table 
id value
1  1
2  1
3  null
4  null

Результат от левого соединения между левой и правой таблицей с использованием (значение) в качестве ключа соединения

Result table
id value id_1 value_1
1  1     1    1
1  1     2    1
2  null  null null

Другие вопросы по теме