1

c我正在寻求一些关于我的左连接有限制的帮助。

我想要做的是遍历我的用户并检查另一个表,如果有问题连接到用户。

但是目前我得到了各种奇怪的结果,它并没有限制每个用户的结果,它还列出了列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并且 LIMIT 有效,但现在它仅适用于第一个用户

在此处输入图像描述

4

2 回答 2

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 BY使用时拥有它也很好LIMIT。除非你想要不确定的结果。

于 2013-05-28T11:50:30.393 回答
1

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

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

于 2013-05-28T10:29:05.530 回答