2016-12-02 2 views
1

質問タイトルは少し曖昧に思えるかもしれません。ここで説明します。別のテーブルで参照されている行を削除するにはどうすればよいですか?

だから、私は2つのテーブルを持っている: 1)イベント 2)連絡先

イベントテーブルには、連絡先表から参照する外部キー(ContactID)を持っています。 私は連絡先を削除するとき、私は最初にコンフリクトを避けるために、削除されているcontactIDを使用しているイベント行を削除する必要があります。

しかし、私はそれを望んでいません。実際に私はContactIDを使用してContactNameとContactNumberを取得し、イベントの詳細をイベントテーブルの他の列と共にグリッドビューに表示します。

これは、イベントを削除したくない理由です。私は、ContactNameとContactNumberのNull値が必要です。

イベントテーブルでContactIDをNULLに設定しようとしました。コード:

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

これは、イベントテーブルのContactIDをNULLに設定します。しかし、私は、イベント情報を取得しようとグリッドビューと両方のテーブルに私は私が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

最後のクエリの問題は、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 

また、テーブルエイリアスを使用するようにクエリを更新しました。

+0

このクエリはSQL Server Management Studioで正常に動作しますが、結果はWebインターフェイスに反映されません。 ContactIDがNULLの行はまだ表示されません。私は間違って何をしていますか? – EL323

+0

私は恐怖を感じています。別の質問として掲示する価値があるかもしれません。 –

+0

大丈夫です。します。ありがとう – EL323

関連する問題