问题标题可能看起来有点模糊。我将在这里解释一下。
所以,我有两张桌子: 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
这是什么解决方法?请帮助我,引导我朝着正确的方向前进。
答案 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
我还更新了查询以使用表别名。