0

SQL 新手。我有 3 个表:gamesinvitationsusers

此查询返回正在进行的游戏:

SELECT games.* 
FROM   games 
       INNER JOIN invitations 
               ON invitations.game_id = games.id 
                  AND invitations.user_id = 1 
                  AND invitations.status = 1 
                  AND games.status = 1; 

此查询返回已完成的游戏:

SELECT games.* 
FROM   games 
       INNER JOIN invitations 
               ON invitations.game_id = games.id 
                  AND invitations.user_id = 1 
                  AND invitations.status = 1 
                  AND games.status = 2; 

此查询返回用户仍未决定是否加入的游戏:

SELECT games.* 
FROM   games 
       INNER JOIN invitations 
               ON invitations.game_id = games.id 
                  AND invitations.user_id = 1 
                  AND invitations.status = 0;

我想知道,如果我有一个需要这 3 个查询结果的 Web 应用程序,我是否必须执行 3 个 sql 语句,或者有没有办法将它们压缩成 1 个?提出 3 个请求对我来说似乎太多了,这是正常的处理方式吗?

4

2 回答 2

1

你可以像这样压缩它:

SELECT games.*, 
       CASE WHEN invitations.status = 1 THEN games.status 
            ELSE invitations.status 
       END status 
FROM   games 
   INNER JOIN invitations 
   ON invitations.game_id = games.id 
      AND invitations.user_id = 1 
      AND ((invitations.status = 1 AND games.status IN (1,2))
         OR (invitations.status = 0))

您可以使用返回的status列来确定哪一行是哪一行。

于 2013-04-10T02:54:35.007 回答
1

试试这个

SELECT 
case when invitations.status = 1 
 then case 
        when games.status = 1 then 'progress'
        when games.status = 2 then 'finished'
      end
else 'not decided' end as game_status,
games.* 
FROM   games 
       INNER JOIN invitations 
               ON invitations.game_id = games.id 
                  AND invitations.user_id = 1 
                  AND (invitations.status = 0 or 
                        (invitations.status = 1 and games.status in (1,2)))

SQL 演示

于 2013-04-10T02:57:09.843 回答