INNER JOIN 3表并计算它们

时间:2012-02-21 07:48:49

标签: sql inner-join

嘿,我需要指望一些我必须加入的桌子。

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 附近的语法错误,

我哪里错了???

3 个答案:

答案 0 :(得分:2)

您的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(表名)等仅适用于此示例,因为以这种方式调用实体不是一个好主意...

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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