ホームページ  >  に質問  >  本文

メインクエリとサブクエリ - サブクエリが望ましい結果を返さない

<p>システムの評価に使用される以下の SQL があります。</p> <pre class="brush:php;toolbar:false;">SELECT `メイン`.`コメントID`、 `メイン`.`コメント`、 `メイン`.`タイムスタンプ`、 `main`.`replay_comment_id`、 COUNT(`replay`.`comment_id`) AS リプレイ FROM `posts_comments` AS `main` LEFT JOIN `posts_comments` AS `replay` ON `replay`.`replay_comment_id` = `main`.`comment_id` どこ `main`.`post` = "107" AND (`main`.`replay_comment_id` IS NULL OR `main`.`comment_id` in ( SELECT `posts_comments`.`comment_id` から `posts_comments` どこ `posts_comments`.`replay_comment_id` = `main`.`comment_id` ) ) グループ化 `メイン`.`コメントID` 注文方法 `main`.`comment_id` ASC;</pre> <p>以下のデータベース構造と内部値を使用します:</p> <pre class="brush:php;toolbar:false;">|------ |列|タイプ|NULL|デフォルト |------ |//**コメントID**//|int(10)|いいえ| |post|int(10)|いいえ| |著者|int(10)|いいえ| |replay_comment_id|int(10)|はい|NULL |タイムスタンプ|int(10)|いいえ| |コメント|varchar(200)|いいえ| == テーブルposts_commentsのデータをダンプしています |19|107|12|NULL|1688801931|コメント 1 |20|107|12|NULL|1688801995|コメント 2 |21|107|13|20|1688801995|コメント 2 に対するコメント 1 をテスト |22|107|12|20|1688801995|コメント 2 に対するテスト 2 コメント |23|107|12|222|1688801995|他のコメント用に 1 件のコメントをテスト</pre>

期待される結果は、ID 19 と 20 の認証は主認証であるため返され、ID 21 と 22 の認証は ID 20 の認証の子認証であるため返されません。 </p><p> サブコメントで、main.comment_id を 20 に置き換えれば、期待どおりの結果が得られますが、main.comment_id を使用する場合は、 </p>これは結果が得られず、どのような検証やアイデアに対しても刺激を与えるものではないことを理解していません。

P粉505917590P粉505917590428日前352

全員に返信(1)返信します

  • P粉521013123

    P粉5210131232023-07-25 13:32:08

    この方法は機能しません。 19 と 20 は main.replay_comment_id IS NULL を満たしますが、21 のサブクエリでは、posts_comments.replay_comment_id = 19 となり、結果が得られません。したがって、サブコメント 21 と 22 は選択されませんでした。

    次のクエリをチェックして、結果が得られるかどうかを確認してください。


    リーリー

    返事
    0
  • キャンセル返事