繁体   English   中英

INNER JOIN 3张桌子并计数

[英]INNER JOIN 3 tables and count them

嘿,我需要数几张我必须加入的桌子。

string strSQL = @"SELECT 3.Text
               FROM  1 WHERE 1.ProductID=@ProductID AND 1.CustomerID=@CustomerID AND 3.Text=@text AND 1.Date BETWEEN '@DateFrom' and '@DateTo' INNER JOIN 
               2 ON 1.ID = 2.1ID INNER JOIN 
               3 ON 2.3ID = 3.ID";

    SqlCommand objCMD = new SqlCommand(strSQL);

    objCMD.Parameters.Add("@ProductID", SqlDbType.Int).Value = ProductID;
    objCMD.Parameters.Add("@CategoryID", SqlDbType.Int).Value = CategoryID;
    objCMD.Parameters.Add("@CustomerID", SqlDbType.Int).Value = CustomerID;
    objCMD.Parameters.Add("@text", SqlDbType.VarChar).Value = text;
    objCMD.Parameters.Add("@DateFrom", SqlDbType.DateTime).Value = DateFrom;
    objCMD.Parameters.Add("@DateTo", SqlDbType.DateTime).Value = DateTo;
    return objData.GetData(objCMD, _Con).Rows.Count;

我不断收到错误消息,说INNER附近有不正确的语法

我要去哪里错了???

您的stringSql绝对错误。 您不能以这种方式混合使用WHERE/ON运算符。

您必须更正它并进行如下操作:

SELECT 
  COUNT(*) 
FROM 1 INNER JOIN 2 
  ON 1.ID = 2.ID 
INNER JOIN 3 
  ON 2.ID = 3.ID 
WHERE 
  1.ProductID=@ProductID 
    AND 
  1.CustomerID=@CustomerID 
    AND 
  3.Text=@text 
    AND 
  1.Date BETWEEN '@DateFrom' and '@DateTo'

编辑:我希望12 (表名)等等仅用于此示例,因为以这种方式调用实体不是一个好主意...

JOIN子句放在连接条件之前,如下所示:

SELECT t3.Text, COUNT(ID)
FROM  Table1 t1 
INNER JOIN Table2 t2 ON t1.ID = t2.ID
INNER JOIN Table3 t3 ON t2.ID = t3.ID
WHERE t1.ProductID = @ProductID 
      AND t1.CustomerID = @CustomerID 
      AND t3.Text=@text 
      AND t1.Date BETWEEN '@DateFrom' and '@DateTo' 
GROUP BY t3.TEXT

您可以将SELECT 3.Text替换为SELECT COUNT(*)以直接获取行数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM