【问题标题】:INNER JOIN with 3 tables using Count(*) function使用 Count(*) 函数与 3 个表进行 INNER JOIN
【发布时间】:2015-12-04 02:37:45
【问题描述】:

我在使用 count 函数时无法让我的内部联接工作,因为它说“Count 函数需要至少 1 个参数”。下面是我在 aspx.cs 文件中的代码。提前感谢您的帮助:)

[INNER Join 问题代码][1]

 protected void CalculateNums_Click(object sender, EventArgs e)
{
    String connectionString = WebConfigurationManager.ConnectionStrings["UniString"].ConnectionString;
    SqlConnection myConnection = new SqlConnection(connectionString);

    String CIT = "1";

    myConnection.Open();

    String findCIT = "SELECT COUNT(*) FROM (SELECT COUNT(class.class_id, class.pathway_year_id, classlist.classlist_id, classlist.class_id, classlist.user_id,pathway_years.id, pathway_years.pathway_id, pathways.id, pathways.pathway) AS findCITString FROM class INNER JOIN classlist ON classlist.class_id = class.class_id INNER JOIN pathway_years ON pathway_years.id = class.pathway_year_id INNER JOIN pathways ON pathways.id = pathway_years.pathway_id WHERE pathways.id = '" + CIT+"')t";


    SqlCommand findCITCommand = new SqlCommand(findCIT, myConnection);

    Int32 findCITString = Convert.ToInt32(findCITCommand.ExecuteScalar().ToString());
    myConnection.Close();

    numInCIT.Text = Convert.ToString(findCITString);
}

ErrorAfterDistinct

String findCIT = "SELECT COUNT(*) FROM (SELECT DISTINCT class.class_id, class.pathway_year_id, classlist.classlist_id, classlist.class_id,      classlist.user_id, pathway_years.id, pathway_years.pathway_id, pathways.id, pathways.pathway FROM class INNER JOIN classlist ON classlist.class_id = class.class_id INNER JOIN pathway_years ON pathway_years.id = class.pathway_year_id INNER JOIN pathways ON pathways.id = pathway_years.pathway_id WHERE pathways.id = '" + CIT + "') as t";

【问题讨论】:

  • 查询看起来不错。此外,AFAIK,Count function requires at least 1 argument 看起来不像 MySQL 错误消息。
  • 我已经用错误的图像更新了问题,如果这使它更清晰? @ForguesR
  • 修复了您问题中的标签。看看我的回答。如果您的查询仍有问题,请告诉我。
  • 我尝试使用这个...并且在我更改为不同的之后更新了我的错误照片...这可能是我的内部连接有问题?再次感谢您的帮助。
  • 谢谢,我会在早上尝试...这里是凌晨 4 点,所以我稍后会更新:) 非常感谢您的帮助。

标签: sql-server visual-studio count inner-join


【解决方案1】:

您使用的不是 MySQL,而是 MSSQL:“计数函数需要至少 1 个参数”是 MSSQL 错误消息。

使用 MSSQL,您只需为 COUNT 提供一个参数。这是您可能正在寻找的查询:

SELECT
  COUNT(*)
  FROM 
    (SELECT 
       DISTINCT class.class_id,
                class.pathway_year_id,
                classlist.classlist_id,
                classlist.class_id,
                classlist.user_id,
                pathway_years.id,
                pathway_years.pathway_id,
                pathways.id,
                pathways.pathway
    FROM class
    INNER JOIN classlist ON classlist.class_id = class.class_id 
    INNER JOIN pathway_years ON pathway_years.id = class.pathway_year_id 
    INNER JOIN pathways ON pathways.id = pathway_years.pathway_id 
    WHERE pathways.id = '" + CIT+"') as t

注意在内部查询中使用DISTINCT 而不是COUNT()

编辑:

很难理解你想用这个查询做什么。无论如何,它仍然不起作用,因为内部查询中的某些列名被使用了两次,例如class_id

这是我将如何重写它:

SELECT
  COUNT(*)
FROM class
INNER JOIN classlist ON classlist.class_id = class.class_id
INNER JOIN pathway_years ON pathway_years.id = class.pathway_year_id
INNER JOIN pathways ON pathways.id = pathway_years.pathway_id
WHERE
  pathways.id = '" + CIT + "'
GROUP BY
  class.class_id,
  class.pathway_year_id,
  classlist.classlist_id,
  classlist.class_id,
  classlist.user_id,
  pathway_years.id,
  pathway_years.pathway_id,
  pathways.id,
  pathways.pathway

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2011-11-18
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 2014-03-13
    相关资源
    最近更新 更多