В T_SQL Null не допускается
У меня есть две таблицы в Sybase
Таблица 1
ID NAME PRICE
123 KING 12.23
234 KONG 23.43
Table2
ID IND CD
123 1 A
When we do "Desc Table2"
Column Name Data Type Null Default Value
ID Int N
IND BIT N 0
CD CHAR Y
Итак, table2 имеет столбец, который никогда не может быть нулевым, и имеет значение по умолчанию, равное 0. Когда я объединяю обе таблицы
select t1.*, t2.IND, t2.CD
from Table1 t1, Table2 t2
where t1.ID *= t2.ID
ВЫХОД:
ID NAME PRICE IND CD
123 KING 12.23 1 A
234 KONG 23.43 0
Желаемый вывод Я хочу показать нулевые значения для полей, которые не найдены в таблице2. когда я пытаюсь обновить, чтобы сделать его нулевым, то это дает мне сообщение NULL не допускается. Похоже, что поле Table2.IND было изначально настроено как недопустимое.
ВЫХОД:
ID NAME PRICE IND CD
123 KING 12.23 1 A
234 KONG 23.43
как изменить эту вещь в моем запросе, чтобы я мог видеть NULL, если данные не существуют в table2.
2 ответа
Вы должны использовать LEFT JOIN
:
SELECT t1.ID, t1.NAME, t1.PRICE, t2.IND, t2.CD
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.ID = t2.ID;
SqlFiddleDemo
Выход:
╔══════╦═══════╦════════╦═════════╦════════╗
║ ID ║ NAME ║ PRICE ║ IND ║ CD ║
╠══════╬═══════╬════════╬═════════╬════════╣
║ 123 ║ KING ║ 12.23 ║ 1 ║ A ║
║ 234 ║ KONG ║ 23.43 ║ (null) ║ (null) ║
╚══════╩═══════╩════════╩═════════╩════════╝
Что вы видите в результате вашего запроса, как LEFT JOIN
(или 20-летний синтаксис *=
) работает.
Если есть строка в t1
с некоторыми ID
а также t2
не имеет строки с тем же ID
, затем
t1 LEFT JOIN t2 ON t1.ID=t2.ID
вернет этот ряд из t1
а также NULL
значения для t2
столбцы, потому что нет соответствующих значений в t2
,
Есть ли у Sybase CASE
заявление? Скорее всего, так и есть. Вы можете использовать его для замены таких NULL
значения с 0
или что вам нужно.
select
t1.*
,CASE WHEN t2.IND IS NULL THEN 0 ELSE t2.IND END AS IND
,t2.CD
from Table1 t1, Table2 t2
where t1.ID *= t2.ID