2017-04-10 24 views
0

テーブルAのレコードを常に表示するためにクエリを作成し、2つの列が一致する場合はテーブルBから照会する必要があります。テーブル1のすべての値とテーブル2の一致のみを照会

表Aは、レコードのリストを保持し、私はすべての時間を表示する1スロットリストすなわち - 3

表Bは、値の動的なリストを持っている、それらは1列(Table_B_Location_Codeを持っています)はすでに表Aと一致する識別子で割り当てられていますが、2番目の列(Table_B_Slot_ID)は後で更新されます。

最良の場合には、表のコンテンツが全て同時に表示されるため、表Bの含有量は、それが表示させ、Table_B_Location_Codeと割り当て Table_B_Slot_IDを有していること、です。

さらに、私は表Bに日付の列を持っています。これは、日付がsysdate(to_char(TABLE_B_DATE,'ddmmyyyy') = to_char(sysdate,'ddmmyyyy'))の場合、テーブルBの項目のみを考慮したいと考えています。

私は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

あなたは、あなたが代わりにテーブルBに一致していない行のnullのいくつかの値を表示したい場合は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 

、あなたが合体使用できる権利必要がある

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

にその条件を追加され、これはあなたを助けますか?A:

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'); 
関連する問題