2016-03-28 95 views
1

我努力創建一條SQL語句,該語句在單個查詢中返回父和子記錄。鏈接表中的父和子記錄的SQL連接

這是我的表....

課程

COURSE_ID | COURSE_CODE 
----------+------------ 
912689 | AUS_COURSE 
912389 | AUS_FH1 
912769 | AUS_FH2 
912528 | AUS_SSMOC1 
912293 | AUS_UNIT1 
912295 | AUS_UNIT2 
912303 | AUS_UNIT3 

COURSE_LINKS

COURSE_ID_FROM | COURSE_ID_TO 
---------------+------------- 
912689   | 912293 
912689   | 912295 
912689   | 912303 

所以你可以在我的鏈接表看到AUS_COURSE有3個兒童記錄,AUS_UNIT1AUS_UNIT2,並AUS_UNIT3

,我想我的查詢以某種方式從COOURSE表中返回兩個父母和孩子的記錄,所以輸出會是這樣的......

COURSE_ID | COURSE_CODE 
----------+------------ 
912689 | AUS_COURSE 
912293 | AUS_UNIT1 
912295 | AUS_UNIT2 
912303 | AUS_UNIT3 

我正在使用什麼連接使用,並加入哪個字段上

非常感謝掙扎,

回答

3

您可以通過使用(子女,父母)和獨特的下降重複的,這樣連接表:

SELECT distinct c.course_ID,c.course_code 
FROM COURSE c 
INNER JOIN COURSE_LINKS cl 
ON(c.course_ID in(cl.course_id_from,cl.course_id_to)) 
+0

非常感謝。這樣做的技巧 – Konzy262

0

您可以使用UNION ALL本:

SELECT COURSE_ID, COURSE_CODE 
FROM COURSE 
WHERE COURSE_ID = 912689 

UNION ALL 

SELECT c1.COURSE_ID, c1.COURSE_CODE 
FROM COURSE AS c1 
JOIN COURSE_LINKS AS c2 ON c1.COURSE_ID = c2.COURSE_ID_TO 
WHERE c2.COURSE_ID_FROM = 912689 
1

我會去一個子查詢,而不是加入。

select COURSE_ID, COURSE_CODE from COURSE 
where COURSE_ID in (select COURSE_ID_FROM from COURSE_LINKS) 
OR COURSE_ID in (select COURSE_ID_TO from COURSE_LINKS) 
+0

沒有必要從course_links中選擇兩次。 – sagi

+0

你確定嗎?看起來他需要COURSE_LINK兩欄中的值。 – BvS

+0

看看我的解決方案 – sagi