[英]SQL Select Statement showing an extra field
使用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行。 第二個select語句似乎是正確的語句,但是我似乎無法在第一個select語句中找到問題所在。
您似乎有一個clientId
在表中出現兩次。
這很容易驗證:
select clientId
from [Outlet Table]
where City = 'London'
group by clientId
having count(*) > 1;
在第一個查詢中,您僅選擇name
,因此看不到其他列。
在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
)
我希望這可以幫助=)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.