Неверный синтаксис рядом со словом слева - PullRequest
0 голосов
/ 31 марта 2020

Я получаю неправильную синтаксическую ошибку рядом со словом слева. Любые идеи? У меня есть таблица транзакций и счетов, поэтому при удалении учетной записи (PK AccountID) я хочу удалить и строки в таблице транзакций с идентификатором FK AccountID.

Спасибо.

       public int DeleteAccount(Account account)
    {
        //var sqlCmd = "DELETE FROM Account LEFT JOIN [Transaction]ON Account.AccountID = Transaction.AccountID WHERE AccountId = " + account.AccountID;

        //var sqlCmd = "delete from [Account] from [Account] left join [Transaction] WHERE Account.AccountID = " + account.AccountID + " AND Transaction.AccountID = " + account.AccountID;
        var sqlCmd = "delete from [Account] WHERE Account.AccountID = " + account.AccountID + " left join [Transaction] ON Account.AccountID = Transaction.AccountID";
        SqlCommand cmd = new SqlCommand(sqlCmd, cnn1);
        var rowAff = cmd.ExecuteNonQuery();
        return rowAff;

Ответы [ 3 ]

2 голосов
/ 31 марта 2020

Что именно вы хотите сделать, не ясно.

Ключевое слово LEFT JOIN возвращает все записи из левой таблицы (таблица1) и сопоставленные записи из правой таблицы (таблица2). Результат равен NULL с правой стороны, если совпадений нет.

Предполагается, что вы хотите удалить запись в таблице A, где в таблице B нет совпадающих записей *

DELETE A FROM TABLE1 A
LEFT JOIN TABLE2 B
ON A.ID = B.SOMEID
AND A.SOMECOL = H.COL
WHERE B.CASEID IS NULL
0 голосов
/ 31 марта 2020

Есть много причин, по которым это просто плохо:

delete
    from [Account] left join
         [Transaction]
         WHERE AccountID = " + account.AccountID;
  1. В нем не указана таблица, из которой вы хотите удалить.
  2. Вы делаете строку запроса с помощью константа, вместо использования параметров.
  3. У вас нет предложения ON с LEFT JOIN.
  4. AccountId, без ссылки на таблицу.

Вы должны удалить этот вопрос и задать новый вопрос. Объясните, что вы хотите сделать. Предоставьте образцы данных, желаемые результаты и соответствующий тег базы данных.

0 голосов
/ 31 марта 2020

Вам нужно сделать Delete from [Account] из [Account] left join ...

Из того, что я понимаю, первое «from» сообщает запросу, из какой таблицы в результатах удалить строки, в то время как второе «from» предназначено для запроса, обычно в запросе есть только одна таблица, поэтому нам не нужно указывать первое from.

...