繁体   English   中英

MySQL:如何解决此查询的临时表错误?

[英]MySQL: How to get around temporary table error on this query?

好吧,我今天整天都在摸不着头脑,无法让它工作,基本上我试图从临时表中随机查询12张照片,其中包含尚未投票的活跃登录用户的所有照片。

错误显然是#1137 - 无法重新打开表:'r1'哪个临时表只能引用一次。

    CREATE TEMPORARY TABLE unvoted_photos
    SELECT *
    FROM photo
    WHERE photo.photo_uid 
    NOT IN 
    ( SELECT photo_uid
    FROM vote
    WHERE vote.user_uid = '12345' ) ;

    SELECT photo_uid, caption, storage_path
      FROM unvoted_photos AS r1 
      JOIN (SELECT (RAND() * 
                    (SELECT MAX(id)
                    FROM unvoted_photos)) AS sid)
                    AS r2
     WHERE r1.id >= r2.id
     ORDER BY r1.id ASC
     LIMIT 12;

由于性能问题,随机选择查询遵循此示例 否则这肯定会奏效。

    SELECT ... FROM photo WHERE photo_uid NOT IN ( voted images subquery ) ORDER BY RAND() LIMIT 12 

在对问题的讨论中,这是一种将两者合并在一起的方法,你应该能够立即运行。 我用JOIN重写了这个,但是在这种情况下我把临时表放到子查询中,这样你就可以看到发生了什么。

SELECT photo_uid, caption, storage_path
  FROM (
          SELECT photo_uid, caption, storage_path
          FROM photo
          WHERE photo.photo_uid 
          NOT IN 
          ( 
            SELECT photo_uid
            FROM vote
            WHERE vote.user_uid = '12345' 
          )

       ) r1 
  JOIN (SELECT (RAND() * 
                (SELECT MAX(id)
                FROM unvoted_photos)) AS sid)
                AS r2
 WHERE r1.id >= r2.id
 ORDER BY r1.id ASC
 LIMIT 12;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM