我在sql数据库中有3个表
我想要做的是能够根据购物车从动物和动物状态表中删除多个项目。
所有表之间的相同之处是AnimalID,它是所有表中的主键,并且基于我应该删除它们。但与此同时,我需要将其删除给有特定电子邮件的人。
例如,如果我有人发送电子邮件为123@gmail.com,则此人在购物车1中有2只动物,ID为123,另一只动物为ID 456 我需要从其他两个表中删除这两个特定的动物。
我知道如何为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
删除AnimalStatusstatic 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|
我想指出的是,我在同时从几个表中删除多个项目的工作知之甚少,因为这不是我们在学校学到的东西,但是我们需要我们学习它。
还要根据我给出的建议指出我们没有学习外键,因此我不确定如何使用它们。
答案 0 :(得分:0)
看看你目前的工作,你可以做一些事情。您可以像要求一样重写查询逻辑,但在您的示例中我没有看到的是主/外键关系。因此,级联将无法与您当前如何设置表格一起使用。这是一个很好的级联删除写。 Cascade Delete
因此,如果您不想重写所有内容,您可以在C#代码中完成所有这些操作。您所要做的就是遍历购物车表并获取所有具有电子邮件“123@gmail.com”的ID,并调用您的三个删除语句。你只需要编写一个方法来获取id并调用delete方法,直到id变量为空。
它只取决于您希望所有逻辑存在于sql或C#代码中的位置。如果您正在使用实体框架,无论是代码优先还是数据库优先,您都可以选择使用LINQ查询语法或扩展方法。只是取决于偏好。