2017-02-10 3 views
2
(select course_id 
from section 
where semester = 'FALL' AND year = 2009) 
    intersect all 
(select course_id 
from section 
where semester = 'SPRING' AND YEAR = 2010); 

Ich lese Datenbank System Konzepte von Henry Korth Fehler, wenn ich ein Schlüsselwort ausgewählt habe.Ich vermisse Schlüsselwortfehler, wenn ich Schlüsselwort habe

Edit: Sieht aus wie ich bin immer nur Fehler, wenn ich ‚alle schneiden‘ benutzen, aber ‚schneiden‘ funktioniert

+0

Was ist "alles überschneiden"? Habe nie davon gehört. Hast du das in dem Buch gelesen? – mathguy

+0

Ja. https://www.amazon.com/Database-System-Concepts-Abraham-Silberschatz/dp/0073523321 –

+0

Ernsthaft? Bist du sicher? Hast du nochmal im Buch nachgesehen? Übrigens, welchen SQL-Dialekt beansprucht das Buch? In Oracle gibt es kein "Alles überschneiden". – mathguy

Antwort

2

Du hast nicht die ALL Teil mit INTERSECT in Oracle verwenden. ALL wird mit UNION, nicht mit INTERSECT oder MINUS verwendet. Probieren Sie es ohne ... (auch die Klammer sind unnötig, sie nichts schaden, nur nicht erforderlich):

select course_id 
from section 
where semester = 'FALL' AND year = 2009 
intersect 
select course_id 
from section 
where semester = 'SPRING' AND YEAR = 2010; 

Offenbar PostgreSQL unterstützt ALL mit INTERSECT, aber Oracle nicht. Ich habe wo es die mimiced werden mit folgenden:

with intersect_tbl as 
(
    select course_id, row_number(partition by course_id) as rnum 
    from section 
    where semester = 'FALL' AND year = 2009 
    intersect 
    select course_id, row_number(partition by course_id) as rnum 
    from section 
    where semester = 'SPRING' AND YEAR = 2010 
) 
select course_id 
from intersect_tbl; 

Da Sie erwähnt, dass das Buch, das Sie Ihrem Beispiel gefunden in indem Sie Ihre Schule zugewiesen ist, würde ich mit ihnen klären, ob es ein bestimmtes DBMS ist, sollten Sie sein Verwenden für Ihre Klasse. Wie ich bereits erwähnte INTERSECT ALL ist in PostgreSQL verfügbar, so könnte es sein, dass sie beabsichtigen, dass Sie diesen Geschmack anstelle von Oracle verwenden.

+0

'rownum' ist der Name einer automatisch generierten Spalte in Oracle; Selbst wenn diese Lösung nicht ausbricht, ist es besser, einen anderen Alias ​​zu verwenden ("rn" ist ziemlich üblich). – mathguy

+0

Ja, es sollte kein Problem sein, aber ich habe den Alias ​​trotzdem in 'rnum' geändert, was ausreichen sollte. – gmiley

+0

Es wird ein Problem für einen zukünftigen Entwickler sein, der den Code liest, nicht versteht, was sein Zweck ist, und durch 'rownum' verwirrt zu werden. Denk nicht nur an dich selbst! :-) – mathguy

Verwandte Themen