0

今までこのようなことをチェックする必要はなかったので、皆さんが助けてくれることを願っています. 一時テーブルを作成するのが最善かどうかわからないので、アイテムがそこにあるかどうか、またはより良い方法があるかどうかを確認してください。

表の各行は、親を持つオブジェクトを表します。親は同じテーブルに格納されます。この例では、parent_id フィールドは行の親の主キーを保持します。type 列が特定の値に設定されていて、親行の field_b 列に「z」が含まれているテーブル内のすべての行を選択しようとしています。括弧内の部分は明らかに作業が必要です...

SELECT s_id, s_text, s_parent_id
FROM sections 
WHERE s_derivedtype >= 10000 AND

これが何かを返す場合

SELECT s_id
FROM sections
WHERE s_id = {the s_parent_id from the first query) AND s_flags LIKE '%z%'

読みやすくなるように更新しました...

これを行う最も効率的な方法は何ですか? テーブルの 18m から 100k 行が返されることを期待しているので、まともなパフォーマンスは自明ではありません。

4

2 に答える 2

2
SELECT key_field, field_a 
FROM
    t s
    inner join
    t p on p.key_field = s.key_field
WHERE
    s.type = 1
    AND p.field_b LIKE '%z%'
于 2013-02-16T23:16:52.960 に答える
1

試す

SELECT t1.key_field, t1.field_a 
FROM tbl AS t1 
WHERE t1.type = 1 AND parent_id = (SELECT t2.id FROM tbl AS t2 
                                    WHERE t2.id = t1.parent_id
                                      AND t2.field_b LIKE '%z%')

また

SELECT t1.key_field, t1.field_a
FROM tbl AS t1 
INNER JOIN tbl AS t2 ON t2.id = t1.parent_id
WHERE t1.type = 1
AND t2.field_b LIKE '%z%'
于 2013-02-16T23:16:28.317 に答える