, как я могу получить нулевое значение, если не существует в правильномполучить строки, которые имеют нулевое значение из таблицы справа
то, что я имею две таблицы один contract_type
ID | name
|
1 | full-time
2 | half-time
3 | volunteer
4 | freelancer
и второй стол отношение между contract_type
и работником
имя таблицы contract
ID | employee_id | contract_type_id
| |
1 | 31 | 1
2 | 31 | 2
3 | 31 | 4
4 | 45 | 3
нет Wi нужен результат будет таким же, как contract_type
таблицы с новыми столбцами, если существует справа или нет
Я попытался это
select * from contract_type left join `contract` on contract_type.ID = contract.contract_type_id where employee_id = 31
теперь проблема является результатом только три записи, но я ожидать получить хотя бы что-то вроде
ID | name | contract_type_id
| |
1 | full-time | 31
2 | half-time | 31
3 | volunteer | null
4 | freelancer | 31
или, может быть
ID | name | status
| |
1 | full-time | true
2 | half-time | true
3 | volunteer | false
4 | freelancer | true
Чтобы исправить запрос, просто переместить это условие из 'WHERE' положение в' ON' пункта. Что происходит, это условная проверка в предложении 'WHERE':' contract.employee_id = 31' исключает любые строки, которые имеют значение «NULL» для 'employee_id'. И это фактически отрицает «изящество» ЛЕВОЙ ВСТУПЛЕНИЯ. Подумайте об этом так: когда внешнее соединение не найдет подходящую строку, MySQL в основном «изобретает» строку для соответствия, поэтому операция объединения может быть удовлетворена, и строка может быть возвращена. И эта изобретенная строка целиком состоит из значений NULL. – spencer7593