LEFT OUTER JOIN с синтаксисом подзапроса

Я изучаю SQL с помощью учебника по GalaXQL.

Я не могу понять следующий вопрос (Упражнение 12):

Сформировать список звезд со звездными идентификаторами ниже 100 с колонками «starname», «startemp», «planetname», и "планетемп". В списке должны быть все звезды с неизвестными данными, заполненными NULL. Эти ценности, как обычно, вымышлены. Вычислите температуру для звезды с ((класс + 7) * интенсивность) * 1000000, и температура планеты рассчитывается по температуре звезды минус 50 раз по орбите.

Каков синтаксис для написания запроса LEFT OUTER JOIN, когда у вас есть элементы подзапроса «AS», которые необходимо объединить?

Вот что у меня есть:

SELECT stars.name AS starname, startemp, planets.name AS planetname, planettemp 
FROM stars, planets 
LEFT OUTER JOIN (SELECT ((stars.class + 7) * stars.intensity) * 1000000 AS startemp 
                 FROM stars) 
             ON stars.starid < 100 = planets.planetid 
LEFT OUTER JOIN (SELECT (startemp - 50 * planets.orbitdistance) AS planettemp 
                 FROM planets) 
             ON stars.starid < 100

Вот схема базы данных (извините, я не могу опубликовать файл изображения из-за низкой частоты повторений):

CREATE TABLE stars (starid INTEGER PRIMARY KEY,
                    name TEXT,
                    x DOUBLE NOT NULL,
                    y DOUBLE NOT NULL,
                    z DOUBLE NOT NULL,
                    class INTEGER NOT NULL,
                    intensity DOUBLE NOT NULL);

CREATE TABLE hilight (starid INTEGER UNIQUE);

CREATE TABLE planets (planetid INTEGER PRIMARY KEY,
                      starid INTEGER NOT NULL,
                      orbitdistance DOUBLE NOT NULL,
                      name TEXT,
                      color INTEGER NOT NULL,
                      radius DOUBLE NOT NULL);

CREATE TABLE moons (moonid INTEGER PRIMARY KEY,
                    planetid INTEGER NOT NULL,
                    orbitdistance DOUBLE NOT NULL,
                    name TEXT,
                    color INTEGER NOT NULL,
                    radius DOUBLE NOT NULL);

CREATE INDEX planets_starid ON planets (starid);
CREATE INDEX moons_planetid ON moons (planetid);
8
задан Daniel Heilper 25 May 2014 в 06:41
поделиться