我在将头放在FROM子句中的子查询时遇到麻烦。我有一个子查询,我想添加到FROM子句中。我只添加了nconst列,然后将其与nconst列一起加入到name_basics表中,除了它应输出的内容外,它可以执行所有其他操作。为什么会这样呢?代码不应该搞乱,我所做的只是添加另一列,而不是操纵代码(据我所知)。
此外,它必须在FROM子句中进行赋值。我只是想澄清一下。我知道链接输出列的直接键时FROM子句如何工作。为此,我不想在输出中显示nconst值,那是我迷路的地方。
输出应该是该专业中每个人的名字。 NP子查询最初没有nconst值。
这是我的代码
SELECT primaryName, profession
FROM (
SELECT profession, COUNT(*) AS TOTAL, nconst
FROM name_profession
GROUP BY profession, nconst
HAVING COUNT(*) < 1000
) AS NP
JOIN
(
SELECT primaryName, nconst
FROM name_basics
) AS NB
ON NP.nconst = NB.nconst
ORDER BY primaryName;
答案 0 :(得分:1)
只需加入表本身
SELECT ??.primaryName, ??.profession, GP.total
FROM (
SELECT profession, COUNT(*) AS TOTAL, nconst
FROM name_profession
GROUP BY profession, nconst
HAVING COUNT(*) < 1000
) AS GP
INNER JOIN name_basics AS NB ON GP.nconst = NB.nconst
ORDER BY primaryName;
但是,请始终在select和where子句中使用表别名。更换 ??上面带有适当的表别名。
如果要加入子查询,并且需要一个特定的列,则必须将该列包括在子查询的select子句中。也就是说,外部查询只能访问该子查询中的选定列。
如果连接有问题,请显示更多,以便您进行调试:
SELECT
NB.primaryName, GP.profession, GP.nconst, GP.total
FROM name_basics AS NB
LEFT JOIN (
SELECT
profession, COUNT(*) AS TOTAL, nconst
FROM name_profession
GROUP BY
profession
, nconst
HAVING COUNT(*) < 1000
) AS GP
ON GP.nconst = NB.nconst
ORDER BY
primaryName;
为了调查
nconst
在子查询中的影响,也许这会有所帮助:
请比较结果:
SELECT
profession, COUNT(*) AS TOTAL
FROM name_profession
GROUP BY
profession
HAVING COUNT(*) < 1000
这:
SELECT
profession, COUNT(*) AS TOTAL, nconst
FROM name_profession
GROUP BY
profession
, nconst
HAVING COUNT(*) < 1000
现在考虑第二个查询(使用内部联接)将如何影响此工作:
SELECT DISTINCT
NB.primaryName, NB.nconst
FROM name_basics AS NB