2016-04-01 7 views
0

Ich versuche, zwei Unterabfragen in PGAdmin (v1.20.0) zu verbinden, wie folgt:Wie kann ich zwei bedingte Unterabfragen in SQL verbinden?

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) 

ich keine Berechtigung zum Tabellen im Schema zu erstellen und ich immer folgende Fehlermeldung erhalten:

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

Irgendwelche Vorschläge?

Antwort

2

Fehler sagt alles. Jede Unterabfrage oder abgeleitete Tabelle muss einen Alias ​​haben. Es sieht so aus:

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

Dies ist der Teil, den Sie vermissen.


Auch, wenn Sie ähnliche Namen in beiden abgeleitete Tabellen haben Sie beitreten, und Sie werden mit der JOIN ... USING() Syntax, dann auf die richtige Art und Weise, dass zu tun wäre:

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) 

Was bedeutet, dass Sie brauche dafür keine Gleichheitsoperatoren. Sie legen fest, nur Bedingungen Gleichheit bei der JOIN ... ON-Klausel, die oben in dem Fall aussehen würde:

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

Ich habe bemerkt, dass Sie Ihre Spalten in beiden abgeleitete Tabellen umbenennen. In der JOIN-Klausel müssen Sie Namen angeben, die für die äußere Abfrage verfügbar sind. Dies wären die umbenannten Spaltennamen, nicht ihre ursprünglichen Namen.

Verwandte Themen