FROM子句子查询从另一个表添加列



我很难理解FROM子句中的子查询。我有一个子查询要添加到FROM子句中。我只添加了ncost列,然后将它与ncost列联接到name_basics表中,它可以执行除应该输出的内容之外的所有操作。为什么会这样?代码混乱是没有意义的,我所做的只是添加另一列,而不是操纵代码(据我所知(。

此外,它必须在赋值的FROM子句中。我只是想澄清一下。我知道FROM子句在链接输出列的直接键时是如何工作的。为此,我不想在输出中显示ncost值,而这正是我迷失的地方。

输出应该是该职业中每个人的名字。NP子查询最初没有ncost值。

这是我的代码

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;

只需加入表本身

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

最新更新