У меня вопрос о соединении с ключом с нулевым значением.
Предположим, у меня есть таблица 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 не отображались в моем результате.
Спасибо!
LEFT JOIN будет включать все, что указано в левой таблице. Думаю, вам может понадобиться INNER JOIN.
Вы можете протестировать.
Почему бы вам самому не попробовать, а не спросить здесь ???
Узнайте, какое левое соединение при возврате: внутреннее соединение по строкам плюс несопоставленные левые строки таблицы, расширенные нулями. Всегда знайте, какое внутреннее соединение вы хотите как часть левого соединения.


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 ... в подзапрос, присоединитесь к нему и поместите вокруг него внешний запрос. Что бы вы ни планировали.
Вы сохраните все результаты из левой таблицы. Имейте в виду, если у вас есть значение 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
I want all null left key rows not to shown in my result.Тогда вы не хотите использоватьLEFT JOIN. Здесь уместно использовать обычныйJOIN(внутреннее соединение).