【发布时间】:2014-07-14 03:44:45
【问题描述】:
我正在通过 GalaXQL 教程学习 SQL。
我不知道下面的问题(练习 12):
使用列生成星号低于 100 的星号列表 “starname”、“startemp”、“planetname”和“planettemp”。名单 应该有所有的星星,未知的数据用 NULL 填充。 像往常一样,这些值是虚构的。计算一个温度 具有 ((class+7)*intensity)*1000000 的恒星,行星的温度为 由恒星温度减去轨道距离的 50 倍计算得出。
当您有需要连接在一起的子查询项“AS”时,编写 LEFT OUTER JOIN 查询的语法是什么?
这是我所拥有的:
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);
【问题讨论】:
-
实际上,我们希望它不是图像,而不是文本;这使得将其转储到运行我们自己的测试的工具中变得更加容易。除其他外,您似乎有一个语法错误:
stars.starid < 100 = planets.planetid(如果数据库接受它,我可以保证您没有得到正确的结果)。将来,我们希望能更好地描述什么不起作用,以及您应该得到什么(“鉴于此起始数据,我的查询结果应该如下所示.. 。”)。不过,这比我见过的一些最初的问题写得更好…… -
很好,会记住这一点。谢谢。
-
“这里是数据库架构(抱歉,由于代表性低,无法发布图像文件)”:您可以现在发布,事后发布 :-)
标签: sql subquery outer-join