【发布时间】:2023-03-28 12:27:01
【问题描述】:
我在一个 SQL 数据库中有 3 个表:
- 动物状况
- 动物
- 购物车
我希望能够根据购物车从 Animals 和 Animal Status 表中删除几个项目。
所有表之间的相同之处是 AnimalID,它是所有表中的主键,因此我应该删除它们。但同时我需要为有特定电子邮件的人删除它。
例如,如果我有一个电子邮件地址为 123@gmail.com 的人,并且此人的购物车中有 2 只动物 1 的 ID 为 123,另一个的 ID 为 456 我需要从其他 2 个表中删除这 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());
以下是所有删除代码的工作顺序:
根据动物 ID 移除 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;
}
根据动物的 ID 从动物表中删除动物:
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 个动物,我需要删除几个。
我尝试过创建这样的语句,但我没能成功。:
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')
根据我用文字给出的示例,应该删除的是//removed中标记的以下内容。
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|
【问题讨论】:
-
样本数据和期望的结果真的很有帮助。
-
请展示您的尝试,以便我们对其进行评论或改进。另请注意,Stack Overflow 不是为我编写代码的服务。最后,哪个 DBMS:Oracle?数据库服务器? mysql?等等等等
-
向您展示表格图片的示例数据?
-
您是否考虑了参照完整性(也就是具有级联删除功能的“外键”)?