2017-09-01 52 views
0
SELECT *, 
IF(users_posts.uid IN (SELECT puid FROM post_ups WHERE post_ups.uid = UID LIMIT 400) AND users_posts.uid <> UID ,10,0) 
    FROM users_posts 

即时得到这个错误的MySQL还不支持限制和IN/ALL/ANY/SOME

该版本的MySQL还不支持“LIMIT & IN/ALL/ANY/SOME 子查询”

如何使用子查询上的限制,我可以将它转换为连接语句,是表现这个查询好上百万+这个重新编码,理论上戈纳运行?

UPDATE 这段代码的结果是否与上面相同?

SELECT *,IF(ups.puid = t1.uid,10,0) 
    FROM users_posts t1 
    LEFT JOIN (SELECT puid FROM post_ups WHERE post_ups.uid = 135 ORDER BY `created_date` DESC LIMIT 400) AS ups ON ups.puid = t1.uid AND t1.uid <> 135 
+0

见https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very - 简单-SQL查询 – Strawberry

回答

1

您可以通过

`SELECT *, 
IF(users_posts.uid IN (select * from (SELECT puid FROM post_ups WHERE post_ups.uid = UID LIMIT 400) tmp_tbl) AND users_posts.uid <> UID ,10,0) 
    FROM users_posts` 

做到这一点或替代LEFT JOIN的使用INNER JOIN。

SELECT *,IF(ups.puid = t1.uid,10,0) 
FROM users_posts t1 INNER JOIN (SELECT puid FROM post_ups WHERE post_ups.uid = 135 ORDER BY `created_date` DESC LIMIT 400) AS ups ON ups.puid = t1.uid AND t1.uid <> 135