2017-04-10 68 views
0

所有值我需要建立了一個查詢,以便在所有時間顯示從表A中的記錄,並且從表B時2列的匹配。查詢從表1和僅匹配從表2

表A持有的記錄的列表,我想顯示所有的時間,即1的槽列表 - 3.

表B由具有值的動態列表中,那些具有1柱(Table_B_Location_Code )已經分配有與表A相匹配的標識符,但第二列(Table_B_Slot_ID)稍後將被更新。

最好的情況是,表A的內容在所有時間顯示,因此,表B內容具有Table_B_Location_Code和分配 Table_B_Slot_ID,讓它出現。

另外,我在表B的日期欄。這意味着,我要考慮從表B的唯一項目,如果日期等於SYSDATE(to_char(TABLE_B_DATE,'ddmmyyyy') = to_char(sysdate,'ddmmyyyy'))。

我想這是一個LEFT OUTER JOIN。但我無法實現它的工作。

CREATE TABLE Table_A (
    Table_A_ID int, 
    Table_A_Location_Code varchar(255), 
    Table_A_Slot_ID int 
); 

CREATE TABLE Table_B (
Table_B_ID int, 
Table_B_Location_Code varchar(255), 
Table_B_Slot_ID int, 
TABLE_B_DATE date); 

INSERT INTO Table_A (Table_A_ID,Table_A_Location_Code,Table_A_Slot_ID) 
VALUES (1, 'Room1', 1); 
INSERT INTO Table_A (Table_A_ID,Table_A_Location_Code,Table_A_Slot_ID) 
VALUES (1, 'Room1', 2); 
INSERT INTO Table_A (Table_A_ID,Table_A_Location_Code,Table_A_Slot_ID) 
VALUES (1, 'Room1', 3); 

INSERT INTO Table_B (Table_B_ID,Table_B_Location_Code,Table_B_Slot_ID,TABLE_B_DATE) 
VALUES (1, 'Room1', 1, 12-04-2017); 
INSERT INTO Table_B (Table_B_ID,Table_B_Location_Code,Table_B_Slot_ID,TABLE_B_DATE) 
VALUES (1, 'Room1', 0, 12-01-2017); 
INSERT INTO Table_B (Table_B_ID,Table_B_Location_Code,Table_B_Slot_ID,TABLE_B_DATE) 
VALUES (1, 'Room1', 0, 12-04-2017); 

Select * from Table_A; 
Select * from Table_B; 

回答

0

你說得對,你需要一個left join

select ta.*, tb.Table_B_Slot_ID 
from Table_A ta 
left join 
     Table_B tb 
on  ta.Table_A_ID = tb.Table_B_ID and 
     ta.Table_A_Slot_ID = tb.Table_B_Slot_ID 

如果你想顯示一些值,而在B表不匹配的行null,您可以使用合併

select ta.*, coalesce(tb.Table_B_Slot_ID, -1) 

編輯(問題進行修改後)

如果你只需要考慮到表B的帳戶行與特定的值時,你能做的就是將這種狀態到join條件

select ta.*, tb.Table_B_Slot_ID 
from Table_A ta 
left join 
     Table_B tb 
on  ta.Table_A_ID = tb.Table_B_ID and 
     ta.Table_A_Slot_ID = tb.Table_B_Slot_ID and 
     to_char(tb.TABLE_B_DATE,'ddmmyyyy') = to_char(sysdate,'ddmmyyyy') 
+0

差不多,但我需要考慮表B的日期,我錯過了我的第一次編輯。 – Cyber

+0

我編輯了我的答案 –

+0

這解決了它。非常感謝。 – Cyber

0

最好這是否可以幫助你:

Select * from Table_A LEFT JOIN Table_B 
    on Table_A.Table_A_SLOT_ID = Table_B.Table_B_SLOT_ID and 
    TABLE_A.Table_A_Location_Code = Table_B.Table_B_Location_Code and 
    to_char(Table_B.Table_B_DATE,'ddmmyyyy') = to_char(sysdate,'ddmmyyyy');