3

我知道以前有人问过这个问题,但我很难理解。我很少使用原始 SQL。
我有三张桌子-Session和。GroupNameGroupSessionFeedback

我正在加入SessiononGroupFeedback并且idUser 我正在加入GroupNameonSession专栏idGroup

这是我的 SQL 代码:

SELECT s.idSession, 
       g.name, 
       s.Assistant, 
       s.idGroup, 
       s.start, 
       s.end, 
       f.value
  FROM rempad.Session s
 INNER JOIN rempad.GroupSessionFeedback f
    ON s.idUser = f.idUser
 INNER JOIN rempad.GroupName g
    ON s.idGroup = g.idGroup
 WHERE s.start BETWEEN '2013-04-28' AND '2013-05-28'
   AND s.idUser = 22
    OR s.idUser = 23
    OR s.idUser = 24
    OR s.idUser = 26
    OR s.idUser = 27
    OR s.idUser = 28
    OR s.idUser = 42;

我希望它带回独特的idSessions,但由于加入,它多次匹配它,我真的不知道采取什么其他方法。我可以对数据库进行单独的调用——但我真的在努力避免敲打数据库,因为它的响应速度非常慢。

有任何想法吗?

提前致谢

4

3 回答 3

3

我使用了此页面上的示例:返回笛卡尔积的 SQL 查询来计算它。公平地说,我没有在我的问题中提供数据库结构。但问题是,在我加入的每个表中,匹配的列不止一列,因此我需要在我的 Join 语句中反映这一点。这是一个示例

 INNER JOIN rempad.GroupSessionFeedback f
 ON s.idUser = f.idUser 
 AND s.idSession = f.idSession 
 AND s.idGroup = f.idGroup

我希望这对其他人有帮助。大号

于 2013-08-31T18:29:49.440 回答
0

这个版本的查询是否遇到同样的问题:

SELECT s.idSession, g.name, s.Assistant, s.idGroup, s.start, s.end, f.value
  FROM rempad.Session s
 INNER JOIN rempad.GroupSessionFeedback f
    ON s.idUser = f.idUser
 INNER JOIN rempad.GroupName g
    ON s.idGroup = g.idGroup
 WHERE s.start BETWEEN '2013-04-28' AND '2013-05-28'
   AND s.idUser in (22, 23, 24, 26, 27, 28, 42);

如果它仍然产生重复的结果,那么你希望这些行是什么?毕竟,这将解决 multiple 的问题idsession,但它不会返回g.nameor f.value

SELECT distinct s.idSession, s.Assistant, s.idGroup, s.start, s.end
  FROM rempad.Session s
 INNER JOIN rempad.GroupSessionFeedback f
    ON s.idUser = f.idUser
 INNER JOIN rempad.GroupName g
    ON s.idGroup = g.idGroup
 WHERE s.start BETWEEN '2013-04-28' AND '2013-05-28'
   AND s.idUser in (22, 23, 24, 26, 27, 28, 42);
于 2013-08-31T19:24:26.063 回答
0

尝试使用这个:

select {.......}
from session s inner join groupsessionfeedback f inner join groupname g
on s.iduser = f.iduser and s.idgroup = g.idgroup
where {.......}

我希望这能解决它。但是,如果此查询中需要任何其他过滤器,请告诉我。

于 2013-08-31T18:03:13.977 回答