使用第一个表中的2个变量将一个表连接到另一个表上,并在Select中获得2个变量

时间:2018-10-12 06:44:48

标签: sql join

更新 考虑2个表。

  

事件表。 eventID int pk status1 int status2 int

     

状态表ID int pk statusName varchar

现在每个事件都有2个以int形式写入的状态。 我想在屏幕上显示事件行,但要从状态表中获取相应的状态名称。因此,我必须将事件表2次连接到状态表。使用status1,status2 int表示状态表的ID。

在使用实体框架时,我正在编写此类代码

 join ds1 in db.Status on te.aStatus equals ds1.ID
 join ds2 in db.Status on te.bStatus equals ds2.ID
select new {
 Status1 = ds1.statusName,
 Status2 = ds2.statusName,
}

但是现在由于某些原因,我不想使用Entity Framework,而是想直接在SQL中编写它 我可以轻松加入2分贝 通过

    SELECT db.Status.statusName FROM db.Main INNER JOIN
 Status ON dbo.Main.aStatus = dbo.Status.ID" 

,这将起作用。但是我该如何进行第二次加入?

在SELECT之后,我获取了这个DataTable对象并获得了循环中的行。在该循环中,我从该行列表创建。 而且我必须获得2个状态

        foreach (DataRow item in dtbProduct.Rows)
            {
                StatusList.Add(new JStatus()
                {
Status1= item["statusName"]  ???
Status2=item["statusName"]  ???

如何在这里获取每种状态的2个变量?

2 个答案:

答案 0 :(得分:0)

  $first_status = select status.statusName , events.* from status
    join events on events.status1 = status.id


    $second_status = select status.statusName, events.* from status
    join events on events.status2 = status.id

    foreach($first_status as $key =>status1){

     foreach($second_status as $k=>status2){
      if($first_status[$key]['id']== $second_status[k]['id']){
          $first_status[$key]['second_status']= $status2[$k][statusName]; 
      }
     }
    }

对不起,可能会对您有所帮助。我只是尝试使用多个数据变量来实现。

答案 1 :(得分:0)

您在下面找到了什么

 SELECT ds1.statusName,ds2.statusName FROM 
 db.Main d
 join db.Status ds1   on d.aStatus = ds1.ID
 join db.Status ds2   on d.bStatus = ds2.ID