【问题标题】:How to make subqueries correct如何使子查询正确
【发布时间】:2011-03-11 22:25:57
【问题描述】:

大家好,我对 SQL 中的子查询有些问题。我正在使用 MS Access 2010 并编写 sql。

SELECT vak.Name, COUNT(vak.amount) AS [First], COUNT(vak2.amount2) AS [Second]    
FROM  
(SELECT kon.Name, (Count(icv.CV_ID) / Count(icv.CV_ID)) AS amount  
 FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID  
 GROUP BY v.Vak_ID, kon.Name) AS vak,  
(SELECT kon.Name, COUNT(v.Vak_ID) AS amount2  
 FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID  
 GROUP BY kon.Name) AS vak2  
GROUP BY vak.Konkursa_Nosaukums

当我在数据表视图中检查它时,两列是相同的。 “第一”中有 6 行,值分别为 12、12、6、12、6、6。“第二”列中的值相同。当我将此代码分成两部分并进行 2 个新查询进行测试时,“第一”列显示值 2、2、1、2、1、1,第二个查询的值为 3、3、1、2、1, 1.这两列分开时都有正确的值,但是当我将它们组合在一起时,一些未知值看起来像 12(我不知道它在哪里取像 12 这样的数字)。当我放线时
WHERE vak.amount=vak2.amount2 在最后一行之前它在两列中显示 2,2,1,2,1,1。我想它只需要第一个子查询或其他东西。

如何正确地制作这些子查询,使它们显示的值与单独编写时相同?

【问题讨论】:

  • 您能否发布您已取出的示例数据和单个子查询......
  • @Nitin Midha 这里是两个单独的查询。第一个: SELECT vak.Name, COUNT(vak.skaits) as [Column Name] FROM (SELECT kon.Name, (Count(icv.CV_ID) / Count(icv.CV_ID)) AS amount FROM (kon INNER JOIN v ON kon.Kon_ID = v.Kon_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID GROUP BY v.Vak_ID, kon.Name) AS vak GROUP BY vak.Name 第二个:SELECT kon.Name, COUNT(v.Vak_ID) AS amount2 FROM Kon INNER JOIN v ON kon.Kon_ID = v.Kon_ID GROUP BY Kon.Name 第一个在 COUNT 列显示 2,2,1,2,1,1,第二个显示 3,3,1,2,1,1在 COUNT 列中
  • 我认为您缺少加入条件,并且在适当的组中具有...如果有意义,请查看下面的答案...

标签: sql ms-access subquery


【解决方案1】:

我认为您缺少加入条件,并且在适当的组中...

SELECT vak.Name, vak.amount AS [First], vak2.amount2 AS [Second]
FROM  
(SELECT kon.Name, (Count(icv.CV_ID) / Count(icv.CV_ID)) AS amount  
 FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID  
 GROUP BY v.Vak_ID, kon.Name) AS vak,
(SELECT kon.Name, COUNT(v.Vak_ID) AS amount2  
 FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID  
 GROUP BY kon.Name) AS vak2  
WHERE vak.Name = van2.Name

【讨论】:

    【解决方案2】:
    SELECT vak.Name, vak.amount AS [First], vak2.amount2 AS [Second]
    FROM  
    (SELECT kon.Name, (Count(icv.CV_ID) / Count(icv.CV_ID)) AS amount  
     FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID  
     GROUP BY v.Vak_ID, kon.Name) AS vak,
    (SELECT kon.Name, COUNT(v.Vak_ID) AS amount2  
     FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID  
     GROUP BY kon.Name) AS vak2  
    WHERE vak.Name = van2.Name
    

    【讨论】:

    • 当我喜欢你时它显示错误,删除了 COUNT 函数并在最后添加了 WHERE。您绑定执行不包含指定表达式“First”的查询作为聚合函数的一部分。
    猜你喜欢
    • 2019-04-04
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 2021-05-06
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多