В 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
Другие вопросы по тегам