2015-10-26 80 views
0

我在Sybase兩個表
表1在T_SQL空不允許

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   

所以,表2有一欄,絕不可爲空並且具有默認值爲0時,我加入這兩個表

select t1.*, t2.IND, t2.CD 
from Table1 t1, Table2 t2 
where t1.ID *= t2.ID 

OUTPUT:

ID NAME PRICE IND CD 
123 KING 12.23 1 A 
234 KONG 23.43 0 

所需的輸出 我想爲在table2中找不到的字段顯示空值。 當我嘗試更新以使其爲空時,它會給我提供消息NULL不允許。 它看起來像Table2.IND字段最初設置爲不允許null。

OUTPUT:

ID NAME PRICE IND CD 
123 KING 12.23 1 A 
234 KONG 23.43 

如何改變這種事情在我的查詢是這樣,我可以看到,如果NULL表2中不存在的數據。

+0

您隱式使用內部連接。切換到左外連接。 – Chet

+0

@Chet'* ='是左連接,儘管OP應該使用ANSI 92樣式語法 –

+0

我不能使用內連接我需要所有ID屬於表1 – Qasim0787

回答

1

你應該使用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) ║ 
╚══════╩═══════╩════════╩═════════╩════════╝ 
+0

這是* =左連接。讓我解釋一下我的問題......如果我們查看table2的描述...列名稱:IND \t數據類型:位\t空值:否\t默認值:0所以,當這個表得到左連接任何表時它的給我們沒有空和默認值爲0. – Qasim0787

+0

嗨,iad2025你的解決方案不工作...請再次查找我解釋我上面的問題.. – Qasim0787

+0

@ Qasim0787選擇不會影響「NOT NULL」屬性。你需要插入這些數據嗎?您的問題對我來說很不清楚 – lad2025

0

你在查詢結果看到的是如何LEFT JOIN(或是20歲舊的語法*=)的作品。

如果在t1行與一些IDt2不具有行具有相同的ID,然後

t1 LEFT JOIN t2 ON t1.ID=t2.ID 

將從t1NULL值返回該行對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 
+0

數量(515)嚴重性(16)狀態(3)服務器(ACUST02DS2)嘗試將NULL值插入表'table2'列'Ind'中。列不允許有空值。更新失敗。 – Qasim0787

+0

兄弟在table2列中IND的數據類型爲BIT,不允許爲null,並且默認值設置爲0. – Qasim0787

+1

1.您的問題很不清楚,我只是猜測您需要什麼。 2.你的問題從不提及'INSERT',那麼關於'INSERT'的錯誤消息是從哪裏來的? 3.列't2.ind'被聲明爲'NOT NULL'並不影響'LEFT JOIN'的工作方式。 'LEFT JOIN'的結果可以包含'NULL'。這是設計。 –