如何在LEFT JOIN上获得LIMIT

时间:2013-05-28 10:25:23

标签: mysql left-join limit

我正在向我的左连接寻求一些限制。

我要做的是循环访问我的用户并检查另一个表是否存在与用户相关的问题。

但是目前我得到了各种奇怪的结果,并没有限制每个用户的结果,它也列出了列 status_link_missing = 0 ,即使我已经告诉子查询只列出 status_link_missing = 1

所以我现在被困住了,非常感谢帮助!

SELECT 
      a.user_id AS settings_userid
    , a.contact_interval
    , b.user_id 
    , b.notify_user 
    , b.status_host_down 
    , b.status_link_missing 
    , b.status_relnofollow 
FROM  `link_exchange_settings` a
LEFT JOIN link_exchange_links b 
  ON b.id
     = ( SELECT c.id 
         FROM link_exchange_links AS c 
         WHERE 
         b.user_id = a.user_id
         AND c.notify_user = 1 
         AND c.status_link_missing = 1 
         LIMIT 1
       )
WHERE a.allow_contact = 1
LIMIT 10

修改

我将 SELECT b.id切换到c.id now 并且LIMIT有效,但现在它只适用于第一个用户

enter image description here

2 个答案:

答案 0 :(得分:2)

尝试此更改(在子查询中不引用b):

SELECT 
      a.user_id AS settings_userid
    , a.contact_interval
    , b.user_id 
    , b.notify_user 
    , b.status_host_down 
    , b.status_link_missing 
    , b.status_relnofollow 
FROM  `link_exchange_settings` a
LEFT JOIN link_exchange_links b 
  ON b.id
     = ( SELECT c.id                        -- changed
         FROM link_exchange_links AS c 
         WHERE 
         c.user_id = a.user_id              -- changed
         AND c.notify_user = 1 
         AND c.status_link_missing = 1
         -- ORDER BY c.something            -- optional, recommended addition
         LIMIT 1
       )
WHERE a.allow_contact = 1
-- ORDER BY a.something_else                -- optional, recommended addition
LIMIT 10 ;

使用ORDER BYLIMIT也很不错。除非你想要不确定的结果。

答案 1 :(得分:1)

您在子查询中使用“c.status_link_missing = 1”,但如果您将在WHERE子句中使用“AND”,您将获得所需的结果。

实际上你必须在主查询的WHERE子句中决定并使用适当的条件,而不是LEFT JOIN子查询。