2016-04-01 10 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.

İlgili konular