使用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行。第二个选择语句似乎是正确的,但我似乎无法在我的第一个选择语句中找到错误。
答案 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
)
我希望这有助于=)