SQL Select语句显示一个额外的字段

时间:2018-03-12 12:59:09

标签: c# sql sql-server

使用C#和SQL Server,我尝试将另一个表中特定ID的名称显示为单独的列表框,使用此代码:

              Con.Open();
                cmd2.CommandText = "select Name from [Client Table] where [Client Table].ClientID in (select [Outlet table].ClientID from [Outlet table] where City='London')";
                dr2 = cmd2.ExecuteReader();
                if (dr2.HasRows)
                {
                    while (dr2.Read())
                    {
                        listBox4.Items.Add(dr2[0].ToString());
                    }
                }
                Con.Close();

在列表框中显示此结果:

   Client Name:
   ____________
   SANYO
   SAMSUNG
   SANYO

但是,当我通过此代码选择字段时:

              Con.Open();
                cmd.CommandText = "select OutletID, ClientID, City from [Outlet Table] where City='London'";
                dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        listBox1.Items.Add(dr[0].ToString());
                        listBox2.Items.Add(dr[1].ToString());
                        listBox3.Items.Add(dr[2].ToString());
                    }
                }
                Con.Close();

它显示了以下结果:

   Outlet ID:                 Client ID:                 City:   
   ____________               ____________              ____________  
   1                          1                         London
   8                          2                         London

合并后,看起来像这样:

   Outlet ID:                 Client ID:                 City:               Client Name:
   ____________               ____________              ____________         ___________
   1                          1                         London               SANYO
   8                          2                         London               SAMSUNG
                                                                            SANYO

我的第一个Select语句由于某种原因似乎显示了一个额外的行,即使它应该只有2行。第二个选择语句似乎是正确的,但我似乎无法在我的第一个选择语句中找到错误。

2 个答案:

答案 0 :(得分:0)

您似乎在表格中出现了两次clientId

这很容易验证:

select clientId
from [Outlet Table]
where City = 'London'
group by clientId
having count(*) > 1;

在第一个查询中,您只选择了name,因此您没有看到其他列。

答案 1 :(得分:0)

在SQL Server中,首先执行查询中的子查询,在您的情况下,子查询返回三个客户端名称。您是否尝试更新子查询?

我们可以这样试试:

 SELECT OutletId,[Outlet table].ClientID, City
    FROM [Outlet table] 
    WHERE City='London' AND [Outlet table].ClientId IN 
    (
       SELECT [Client Table].ClientID 
       FROM [Client Table] 
       WHERE [Outlet table].ClientId = [Client Table].ClientID
    )

我希望这有助于=)