簡體   English   中英

SQL Select語句顯示一個額外的字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM