SQL Server:INNER JOIN两次写出内容

时间:2012-09-10 11:05:22

标签: c# asp.net sql database inner-join

这是我的SQL查询

select 
    tblUnderKategori.fldKategori, 
    tblUnderKategori.fldNavn,  
    tblUnderKategori.fldBillede, 
    tblKategori.fldId, 
    tblKategori.fldKategoriNavn 
from 
    tblUnderKategori
inner join 
    tblKategori on tblUnderKategori.fldKategori=2    

正如你所看到的那样,我需要fldKategori = 2所需的所有内容,所以它确实需要,但它会将其写出x2次。

这是我需要显示的地方的后端代码

katFac objKat = new katFac();
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack && !string.IsNullOrEmpty(Request.QueryString["id"]))
    {
        foreach (DataRow item in objKat.GetUnderkatByKat(Convert.ToInt32(Request.QueryString["id"])).Rows)
        {
            litUnderkategori.Text += item["fldNavn"].ToString() + "<br /><br />";
        }
    }
}

我只是无法找出问题,所以任何人都请帮忙

提前谢谢! :)

4 个答案:

答案 0 :(得分:2)

您正在此处创建一个karthesian产品,因为您的连接缺少实际将两个表连接在一起的条件。
试着用这个:

select  
    tblUnderKategori.fldKategori,  
    tblUnderKategori.fldNavn,   
    tblUnderKategori.fldBillede,  
    tblKategori.fldId,  
    tblKategori.fldKategoriNavn  
from  
    tblUnderKategori 
        inner join tblKategori  
            on tblUnderKategori.fldKategori = tblKategori.fldId
where tblUnderKategori.fldKategori=2  

这假定tblUnderKategori.fldKategori包含父类别的ID。

答案 1 :(得分:1)

JOIN加入两个表,您必须提供公共列。如果您还想过滤掉某些值,请在之后添加WHERE子句。此外,如果您以后没有明确地想要阅读它们,则实际上您不必SELECT用于匹配和加入的字段。

select 
   tblUnderKategori.fldNavn,  
   tblUnderKategori.fldBillede, 
   tblKategori.fldKategoriNavn
from tblUnderKategori join tblKategori
   on tblUnderKategori.fldKategori = tblKategori.fldId
where
   tblUnderKategori.fldKategori = 2    

答案 2 :(得分:1)

ON子句指定应该在哪个列上连接表,条件应该包含在WHERE子句中。试试这样的事情:

SELECT
   tblUnderKategori.fldKategori, 
   tblUnderKategori.fldNavn, 
   tblUnderKategori.fldBillede,
   tblKategori.fldId,        
   tblKategori.fldKategoriNavn    
FROM tblUnderKategori           
   INNER JOIN tblKategori    
   ON tblUnderKategori.[some key column] = tblKategori.[corresponding key column]        
WHERE tblUnderKategori.fldKategori=2 

答案 3 :(得分:0)

您的SQL语句缺少JOIN表上的字段。它应该是这样的:

select u.fldKategori, 
    u.fldNavn,  
    u.fldBillede, 
    k.fldId, 
    k.fldKategoriNavn 
from tblUnderKategori u
inner join tblKategori k
  on u.fldKategori = k.fldId
where u.fldKategori=2   

然后,您将在WHERE子句中应用过滤器。