Удалить несколько строк в нескольких таблицах - PullRequest
0 голосов
/ 06 июня 2018

У меня есть 3 таблицы в базе данных sql

  1. Статус животного
  2. Животные
  3. Корзина

Что яхочу сделать, это иметь возможность удалить несколько элементов из животных и таблиц статуса животных на основе корзины.

То же самое между всеми таблицами является AnimalID, который является первичным ключом во всех таблицах иисходя из этого я должен удалить их.Но в то же время мне нужно удалить его для кого-то с определенным адресом электронной почты.

Например, если у меня есть кто-то с электронным адресом 123@gmail.com, и у этого человека в корзине 2 животных: 1 с идентификатором123, а другой с идентификатором 456. Мне нужно удалить этих 2 конкретных животных из двух других таблиц.

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

Вот как это работает снаружи

x= AnimalStatus.Delete(AdoptCart.GetAnimalId(Session["email"].ToString()).ToString());
            if (x > 0)
            {
                x = Animal.Delete(AdoptCart.GetAnimalId(Session["email"].ToString()).ToString());
                if (x > 0)
                {
                    AdoptCart.RemoveAllbyEmail(Session["email"].ToString());

Вот все коды удаления в порядке их работы:

Удаляет AnimalStatus на основе идентификатора животных

static public int Delete(string id)
    {
        int rowsAffected;
        string strSql = string.Format("delete from AnimalStatus where AnimalID='" + id + "'");
        rowsAffected = (int)dataservice.ExecuteNonQuery(strSql);
        return rowsAffected;
    }

Удаляет животное из таблицы животных на основе идентификатора животного

 static public int Delete(string id)
        {
            int rowsAffected;
            string strSql = string.Format("delete from Animal where AnimalID='" + id + "'");
            rowsAffected = (int)dataservice.ExecuteNonQuery(strSql);
            return rowsAffected;
        }

Удаляет всех животных из таблицы корзины

static public int Remove(string AnimalID) 
    {
        int rowsAffected;
        string strSql = string.Format("delete from Cart where AnimalID='" + AnimalID + "'");
        rowsAffected = (int)dataservice.ExecuteNonQuery(strSql);
        return rowsAffected;
    }

Проблема сэти коды состоят в том, что все это удаляет только 1 животное, и мне нужно несколько удаленных объявлений, поэтому все это неправильно

Я попытался создать утверждение типа одного предложения из другого вопроса stackoverflow, который был решен, однако ямне не удалось настроить мои вещи, чтобы заставить его работать.То, что я пробовал:

Delete Animal.*, AnimalStatus.*

FROM     Animal INNER JOIN
                  AnimalStatus ON Animal.AnimalID = AnimalStatus.AnimalID INNER JOIN
                  Cart ON Animal.AnimalID = Cart.AnimalID
WHERE  (Cart.UserEmail = N'Email')

Исходя из приведенного мною примера, следующие слова, которые должны быть удалены, помечены как // удалено

Cart Table
 | AnimalID | Email_Addr |
--------------------------------------
| 123 | 123@gmail.com | //removed
| 456 | 123@gmail.com | //removed
| 765 | jj@gmail.com  |
| 343 | bb@gmail.com  |
| 256 | cc@gmail.com  |

Animal Status Table
 | AnimalID | Vaccinated |
--------------------------------------
| 123 | Yes | //removed
| 456 | Yes | //removed
| 765 | No  |
| 343 | No  |
| 256 | No  |

Animals Tables
 | AnimalID | Age |
--------------------------------------
| 123 | 3 | //removed
| 456 | 4 | //removed
| 765 | 3 |
| 343 | 7 |
| 256 | 10|

Хотелось бы простоотметьте, что я работаю с очень небольшими знаниями, когда дело доходит до удаления нескольких предметов из нескольких таблиц одновременно, поскольку это не то, чему мы учились в школе, однако требуется, чтобы мы изучали это.

Также хотел бы указатьНа основании предложений, которые мне дали, мы не изучили внешние ключи, поэтому я не уверен, как с ними работать.

1 Ответ

0 голосов
/ 06 июня 2018

Глядя на вашу текущую работу, вы можете сделать несколько вещей.Вы можете переписать логику запроса так, как вы спрашиваете, но в вашем примере я не вижу отношений первичный / внешний ключ.Так что каскад не будет работать с тем, как у вас настроены ваши таблицы.Это хорошая запись каскадного удаления. Каскадное удаление

Так что, если вы не хотите переписывать все, что вы действительно можете сделать, просто сделайте все это в своем коде C #.Все, что вам нужно сделать, это перебрать таблицу корзины и получить все идентификаторы с адресом электронной почты "123@gmail.com" и вызвать три оператора удаления.Вам просто нужно написать метод, чтобы получить идентификаторы и вызывать методы удаления, пока переменная id не станет пустой.

Это просто зависит от того, где вы хотите, чтобы существовала вся логика, в sql или в вашем C #код.Если вы используете Entity Framework, будь то сначала код или база данных, у вас есть возможность использовать синтаксис LINQ Query или методы расширения.Просто зависит от предпочтений на самом деле.

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