Member 13550326 Ответов: 2

Удаление записи из нескольких таблиц в mysql


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

sqlcommand.CommandText = "DELETE Ledgers,Bank_Detls FROM Ledgers INNER JOIN Bank_Detls ON Bank_Detls.Cust_ID = Ledgers.Cust_ID WHERE Ledgers.Cust_ID = @custid and Bank_Detls.Cust_ID = @custid"

            sqlcommand.Parameters.Clear()
            sqlcommand.Parameters.AddWithValue("custid", TxtCustID.Text)
            sqlcommand.ExecuteNonQuery()

Если предположим, что у стороны есть банковская информация в таблице Bank_Detls, то приведенный выше код работает отлично, но если у стороны нет банковской информации в таблице Bank_Detls, то запись из гроссбухов также не удаляется. Что я делаю не так?

Что я уже пробовал:

В своем предыдущем посте я уже говорил, что новичок в программировании. Честно говоря, я не очень старался в этом вопросе, кроме как пытаться получить помощь из интернета.

Visweswaran N

можете ли вы дать мне информацию о таблице?

Afzaal Ahmad Zeeshan

Я бы настоятельно рекомендовал использовать отношения SQL и выполнять удаление дочерних таблиц автоматически по мере удаления родительских данных. В этом и заключается преимущество использования базы данных SQL.

2 Ответов

Рейтинг:
0

Richard Deeming

Один DELETE оператор не может быть нацелен более чем на одну таблицу.

Вам нужно будет либо выдать два DELETE заявления:

sqlcommand.CommandText = "DELETE FROM Bank_Detls WHERE Cust_ID = @custid; DELETE FROM Ledgers WHERE Cust_ID = @custid;"

sqlcommand.Parameters.Clear()
sqlcommand.Parameters.AddWithValue("@custid", TxtCustID.Text)
sqlcommand.ExecuteNonQuery()
или измените ограничение внешнего ключа на каскадное удаление:
Каскадная ссылочная целостность | ограничения первичного и внешнего ключей - SQL Server | Microsoft Docs[^]


Рейтинг:
0

phil.o

Пожалуйста, попробуйте заменить ваш INNER JOIN с собой LEFT JOIN- и посмотрим , что получится.
В противном случае вы также можете выдать два различных DELETE пункты, по одному для каждой таблицы.