メインクエリとサブクエリ - サブクエリが望ましい結果を返さない
P粉505917590
P粉505917590 2023-07-24 15:42:03
0
1
416
<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粉505917590
P粉505917590

全員に返信(1)
P粉521013123

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

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


リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート