如何删除另一个表中引用的行?

时间:2016-12-02 09:41:31

标签: c# asp.net sql-server

问题标题可能看起来有点模糊。我将在这里解释一下。

所以,我有两张桌子: 1)事件 2)联系

事件表具有从联系表引用的外键(ContactID)。 因此,当我删除联系人时,我必须首先删除正在使用被删除的contactID的事件行,以避免任何冲突。

但我不想那样。实际上我使用ContactID来获取ContactName和ContactNumber,同时在gridview中显示事件详细信息以及事件表中的其他列。

这就是我不希望删除事件的原因我只想要ContactName和ContactNumber的Null值。

我在事件表中尝试将ContactID设置为NULL。代码:

string query0 = "Update Event SET ContactID=@contact where ContactID='" + cntID + "'";
SqlCommand cmd0 = new SqlCommand(query0, conn);
cmd0.Parameters.AddWithValue("contact", DBNull.Value);
conn.Open();
cmd0.ExecuteNonQuery();
conn.Close();

这将事件表中的ContactID设置为NULL就好了。但是当我尝试在gridview中获取事件信息并在两个表上应用连接时,我没有得到事件记录,我将ContactId设置为NULL。 这是获取事件信息的查询:

SELECT Event.ID, Event.StartDate, Event.Title, Contact.Name, Contact.Cell, Event.EventType, Event.Confirmed, Event.Comments 
FROM Event 
INNER JOIN Contact ON Event.ContactID = Contact.ID

这是什么解决方法?请帮助我,引导我朝着正确的方向前进。

1 个答案:

答案 0 :(得分:1)

您对最终查询的问题是您使用INNER JOIN,它只返回两个表中存在的结果。如果您有没有相关联系人的活动,请将其更改为LEFT JOIN;

SELECT e.ID, e.StartDate, e.Title, c.Name, c.Cell, e.EventType, e.Confirmed, e.Comments 
FROM Event e
LEFT JOIN Contact c ON e.ContactID = c.ID

我还更新了查询以使用表别名。