1

私は2つのテーブルを持っています:

  1. イベント:

    -id; 名前; 開始イベント; エンドイベント; 個人ID;

  2. 登録Korisnik:

    -id; イム;

今、私はこれを書いています:

SqlDataAdapter da = new SqlDataAdapter(
         "SELECT [id], [name], [eventstart], [eventend] " +
         "FROM [Event] " + 
         "WHERE NOT (([eventend] <= @start) OR ([eventstart] >= @end))",
       con);

この表示名だけで、eventstart、eventend. ここで、 Person テーブルから name を表示し、 event から name, eventstart, eventend を表示したいと思います。Event テーブルで、Event テーブルの PersonID を Person テーブルの ID フィールドに結合したいと思います。手伝って頂けますか?

編集:すべてのコードで、p.imeを表示しない理由がわからない

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DayPilotCalendar1.StartDate = DayPilot.Utils.Week.FirstDayOfWeek(new DateTime(2012, 09, 17));
            DayPilotCalendar1.DataSource = dbGetEvents(DayPilotCalendar1.StartDate, DayPilotCalendar1.Days);
            DataBind();
        }

    }


 protected DataTable dbGetEvents(DateTime start, int days)
    {

      SqlConnection con = new SqlConnection();
      con.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=Korisnik;Integrated Security=True";
      //SqlDataAdapter da = new SqlDataAdapter("SELECT [id], [name], [eventstart], [eventend] FROM [Event] WHERE NOT (([eventend] <= @start) OR ([eventstart] >= @end))", con);
     //SqlDataAdapter da = new SqlDataAdapter("select  e.id as EventId, e.name as EventName, e.eventstart, e.eventend, p.Id as PersonId, p.ime as PersonName from Event e inner join RegistracijaKorisnik p on e.PersonID=p.id where not (([eventend] <= @start) OR ([eventstart] >= @end))", con);
      //SqlDataAdapter da = new SqlDataAdapter("SELECT e.id, e.name, e.eventstart, e.eventend, p.ime FROM Event e INNER JOIN RegistracijaKorisnik p ON e.PersonID = p.id WHERE NOT ((e.eventend <= @start) OR (e.eventstart >= @end ))", con);
      SqlDataAdapter da = new SqlDataAdapter("SELECT e.id, e.name, e.eventstart, e.eventend, p.ime AS 'Person Name' FROM Event e INNER JOIN RegistracijaKorisnik p ON e.PersonID = p.id WHERE NOT ((e.eventend <= @start) OR (e.eventstart >= @end ))", con);
      da.SelectCommand.Parameters.AddWithValue("start", start);
      da.SelectCommand.Parameters.AddWithValue("end", start.AddDays(days));

      DataTable dt = new DataTable();
      da.Fill(dt);
      return dt; 


    }
4

4 に答える 4

2

JOIN2 つのテーブル:

SELECT e.id, e.name, e.eventstart, e.eventend,
       p.Name + ' ' + p.Surname AS 'Person Name'
FROM Event e
INNER JOIN Person p ON e. PersonID = p.ID
WHERE NOT ((e.eventend <= @start) OR (e.eventstart >= @end ))
于 2012-09-17T14:09:13.267 に答える
2
select 
  e.id as EventId
  ,e.name as EventName
  ,e.startevent
  ,e.endevent
  ,p.Id as PersonId
  ,p.name as PersonName 
  ,p.surname as PersonSurname
  ,p.email
from Event e
join Person p on e.PersonId=p.Id
where not (([eventend] <= @start) OR ([eventstart] >= @end))
于 2012-09-17T14:10:36.137 に答える
1

あなたの質問を正しく理解していれば、これは次のような単純な結合です。

SELECT e.id, e.name, e.eventstart, e.eventend, p.name
FROM Event e
   INNER JOIN Person p ON p.Id = e.ID
WHERE NOT ((e.eventend <= @start) OR (e.eventstart >= @end)
于 2012-09-17T14:09:03.567 に答える
0

2 つのテーブルに同じ列名があります。

この問題の解決策は

  • tablename.columnnameのようなクエリで完全修飾列名を使用できます-つまり、event.id、person.idなどまたは

  • エイリアス lik select イベントを e として使用できます

動作するはずです

于 2012-09-17T14:16:15.243 に答える