简体   繁体   English

怎么写这个SQL语句?

[英]How to write this SQL statement?

I have two tables: 我有两个表:

  1. Event: 事件:

    -id; -ID; name; 名称; startevent; startevent; endevent; 结局 PersonID; PersonID;

  2. RegistracijaKorisnik: RegistracijaKorisnik:

    -id; -ID; ime; 我;

Now i have written this: 现在我写了这个:

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

With this only display name , eventstart, eventend. 仅使用显示名称,eventstart和eventend。 Now I would like to display the name from the Person table and name, eventstart, eventend from event . 现在,我想显示Person表中的名称,以及event的名称,eventstart和eventend。 In the Event table, I would like to join the PersonID from the Event table to the ID field in the Person table. 在“事件”表中,我想将“事件”表中的PersonID联接到“人”表中的ID字段。 Can you help me? 你能帮助我吗?

Edit: All code, and don't know why don't show the p.ime 编辑:所有代码,并且不知道为什么不显示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; 


    }

JOIN the two tables: JOIN两个表:

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 ))
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))

If I understand your question correctly, this is just a simple join, as follows: 如果我正确理解了您的问题,则这只是一个简单的联接,如下所示:

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)

You have same column names in two tables. 您在两个表中具有相同的列名。

Resolution to this problem is 解决此问题的方法是

  • you can either use fully qualified column names in query like tablename.columnname - ie event.id, person.id etc or 您可以在查询中使用完全限定的列名,例如tablename.columnname-即event.id,person.id等,或

  • You can use alias lik select event as e 您可以将别名lik select事件用作e

which should work 哪个应该工作

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM