2016-04-01 15 views
0

Ben pgAdmin (v1.20.0) iki alt sorgular katılmaya çalışıyorum: Ben şemada tablolar oluşturmak için izniniz yokSQL'de iki koşullu alt soruna nasıl katılabilirim? aşağıdaki gibi

select * from (
    select distinct course_code "400-Level Courses", meet_time_start "Starting Time", meet_time_end "End Time", meet_day_of_week "Day", building_code "Building", building_room_no "Room" 
    from faculty_course_credit 
    left join course_schedule using (term_id, course_code, course_ref_no) 
    where (substring(course_code,4,1) = '4') and meet_time_start != '00:00' 
    ) 
inner join (
select * from (
    select distinct course_code "500-Level Courses", meet_time_start "Starting Time", meet_time_end "End Time", meet_day_of_week "Day", building_code "Building", building_room_no "Room" 
    from faculty_course_credit 
    left join course_schedule using (term_id, course_code, course_ref_no) 
    where (substring(course_code,4,1) = '5') and meet_time_start != '00:00' 
    )) 
using (building_code=building_code, building_room_no=building_room_no, meet_time_start=meet_time_start, meet_time_end=meet_time_end, meet_day_of_week=meet_day_of_week) 

ve aşağıdaki hata iletisi almaya devam:

ERROR: subquery in FROM must have an alias LINE 1: select * from ( ^HINT: For example, FROM (SELECT ...) [AS] foo. ********** Error **********

ERROR: subquery in FROM must have an alias SQL state: 42601 Hint: For example, FROM (SELECT ...) [AS] foo. Character: 16

Herhangi bir öneriniz var mı?

cevap

2

Hata her şeyi söylüyor. Her alt sorgu veya türetilmiş tablo , bir takma ada sahip olmalıdır. Şöyle gözükür:

SELECT * FROM (...) AS alias1 -- AS keyword is not needed, but I prefer it for readability 

Bu, eksik olduğunuz bölümdür. Eğer katılan her iki türetilmiş tablolarda benzer adlara sahip ve yapmak JOIN ... USING() sözdizimi, ardından düzgün bir şekilde kullanıyorsanız


Ayrıca olurdu:

SELECT t.col1, t.col2, t2.col1, t2.col2 -- this is to show you that names in both tables are identical 
FROM table t 
LEFT JOIN table2 t2 USING (col1, col2) 

sen misin Anlamı Bunun için eşitlik operatörlerine gerek yok. durumda yukarıdaki gibi görünecektir JOIN ... ON maddesini kullanırken yalnızca eşitlik koşulları belirtin:

SELECT t.*, t2.* 
FROM table t 
LEFT JOIN table2 t2 ON t.col1 = t2.col1 AND t.col2 = t2.col2 

İkinizin de türetilmiş tablolarda Sütunlarınızı yeniden adlandırma fark ettik. JOIN yan tümcesinde dış sorgu için kullanılabilen adlar belirtmeniz gerekir. Bunlar, ilk adlarını değil, yeniden adlandırılmış sütun adları olacaktır.