ВНУТРЕННЕЕ СОЕДИНЕНИЕ 3 таблицы и подсчитать их - PullRequest
0 голосов
/ 21 февраля 2012

Эй, мне нужно подсчитать несколько столов, к которым я должен присоединиться.

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 ]

2 голосов
/ 21 февраля 2012

Ваш 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'

Edit: я надеюсь, что 1 и 2 (имя таблицы) и т. Д. Только для этого примера, потому что не очень хорошая идея вызывать сущности таким образом ...

1 голос
/ 21 февраля 2012

Поставьте предложение 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
0 голосов
/ 21 февраля 2012

Вы можете заменить SELECT 3.Text на SELECT COUNT(*), чтобы получить количество строк напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...