SQL SELECT在GridView中两次返回相同的值

时间:2013-12-20 19:58:50

标签: c# asp.net sql select gridview

美好的一天,

所以我正在开发一个小型应用程序,用于将条目存储到表格中(作者,纸张/书籍的简短描述),然后是元数据(用户投票,条目ID,用户ID和注释)。我有一些工作正在使用JOIN来获取我想要根据登录用户“1”显示的信息。

问题在于我遇到了一个奇怪的错误,因为关于单个条目有多个元数据行,条目本身会多次显示。 IE我在一个条目上有2条评论,条目本身在我的GridView中出现两次。

我不太确定如何解决这个问题。

的.cs

string id = "1";
DbConn dbConn = new DbConn();

SQL = "SELECT * FROM ec.dbo.entry e INNER JOIN ec.dbo.metadata m
ON e.eID = m.eID WHERE m.uID='"+ id + "'";
ds = new DataSet();
ds = dbConn.createDataSet(SQL);
results.DataSource = ds;
results.DataBind();

string SQL3 = "SELECT * FROM ec.dbo.entry e RIGHT JOIN
ec.dbo.metadata m ON m.eID = e.eID WHERE m.uID <> '" + id + "' OR m.uID IS NULL
OR m.eID IS NULL";
dsPending = new DataSet();
dsPending = dbConn.createDataSet(SQL3);
pending.DataSource = dsPending;
pending.DataBind();

Screenshot of Duplication of Data

当用户单击“是”或“否”时,该条目会根据登录的用户创建元数据。然后运行此选择命令,并且只能以这种方式提取信息:

1。)如果用户已登录;检查他们是否有任何元数据,并将具有所述元数据的条目拉入第一个GridView

2.)如果没有与条目关联的元数据和用户登录,则显示第二个GridView中尚未投票的所有条目(创建元数据)。

3。)投票时,该条目不应出现在第二个GridView中,只显示在第一个GridView中。

如果这没有意义,请告诉我,我可以尝试更好地澄清。

因此您可以看到'MotoX'条目正在重复。任何帮助将不胜感激。

修改

我做了一些更改,并在删除重复项方面向前迈出了一步,但在此过程中,它显示了我的所有条目,而不仅仅是没有与登录用户关联的元数据的条目。

的.cs

string SQL3 = "SELECT * FROM ec.dbo.entry e 
WHERE EXISTS( SELECT 'X' from ec.dbo.metadata m
where m.eID = e.eID and (m.uID <> '' OR m.uID IS NULL));";
dsPending = new DataSet();
SqlConnection dbconn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(SQL3, dbconn);
DataTable dt = new DataTable();

SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
pending.DataSource = dt;
pending.DataBind();

照片 Not duplicating, but now just displaying all entries

2 个答案:

答案 0 :(得分:3)

可能,您的metadata表在entry表中有一条记录有2条记录。 如此简单的修复是通过向条目记录添加distinct。 否则,请尝试下面的EXISTS查询。

 SELECT * FROM EnglishConference.dbo.entry e 
WHERE EXISTS
( SELECT 'X' from ec.dbo.metadata m 
   where m.eID = e.eID and  (m.uID <> '<YOUR_ID>' OR m.uID IS NULL));

抱歉,我使用的是ipad,不容易输入:(

答案 1 :(得分:0)

即使不同也会获取两条记录。他已经确定了两个不同的记录,我认为他加入的专栏肯定不是唯一的关键。