1

c制限付きの左結合について助けを求めています。

私がやろうとしているのは、ユーザーをループして、ユーザーに関連する問題があるかどうかを別のテーブルにチェックインすることです。

しかし、現在、私はあらゆる種類の奇妙な結果を取得しており、各ユーザーの結果を制限せず、サブクエリにstatus_link_missing = 1のみをリストするように指示したにもかかわらず、列status_link_missing = 0もリストしています

だから私は今のところ立ち往生しています、助けていただければ幸いです!

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句で使用すると、目的の結果が得られます。

実際には、LEFT JOIN サブクエリではなく、メイン クエリの WHERE 句で適切な条件を決定して使用する必要があります。

于 2013-05-28T10:29:05.530 に答える