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

时间:2018-11-01 23:33:45

标签: sql-server

我在将头放在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;

1 个答案:

答案 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