1

qFieldInner

PARAMETERS pText1 Text ( 255 );
SELECT entries.en_main, MIN(entries.en_id) AS en_id
FROM entries
WHERE (((entries.en_main) In (625, 1310)))
GROUP BY en_main;

このクエリを実行すると、次のように返されます。

625 76719
1310 177239

ただし、これを次のように変換すると:

PARAMETERS pText1 Text ( 255 );
SELECT entries.en_main, MIN(entries.en_id) AS en_id
FROM entries
WHERE (((entries.en_main) In (SELECT en_main FROM qFieldInnest)))
GROUP BY en_main;

その後、ハングします。

qFieldInnestはこれで、手動で実行すると 625 と 1310 が正しく返されます

PARAMETERS pText1 Text ( 255 );
SELECT DISTINCT entries.en_main
FROM entries
WHERE (((entries.en_lect) Like ("* " & [pText1] & "*") Or (entries.en_lect) Like ([pText1] & "*")) AND ((entries.en_ref)=0) AND (((entries.en_se)=1) OR ((entries.en_meros)=6))) OR (((entries.en_thama) Like ("* " & [pText1] & "*") Or (entries.en_thama) Like ([pText1] & "*")));

ここで何が問題なのか理解できません。

4

1 に答える 1

3

qFieldInnestこれには、SQL をサブクエリとして使用するクエリとINNER JOIN、テーブルへのサブクエリを使用してアプローチしentriesます。

WHEREqFieldInnestは、私が従うのが難しいです。実行しなければならない作業量が多いため、db エンジンにも挑戦します。

テストするものが何もないので、次の SQL で間違いを犯したかどうかわかりません。うまくいかない場合は、サブクエリ SQL を新しいクエリに分割し、それを個別にテストします。

PARAMETERS pText1 Text ( 255 );
SELECT e.en_main, MIN(e.en_id) AS en_id
FROM
    entries AS e
    INNER JOIN
    (
        SELECT DISTINCT en_main
        FROM entries
        WHERE
                (
                    (
                           en_lect Like "* " & [pText1] & "*"
                        Or en_lect Like [pText1] & "*"
                    )
                    AND en_ref=0
                    AND
                        (
                               en_se=1
                            OR en_meros=6
                        )
                )
            OR
                (
                       en_thama Like "* " & [pText1] & "*"
                    Or en_thama Like [pText1] & "*"
                )

    ) AS sub
    ON e.en_main = sub.en_main
GROUP BY e.en_main;
于 2012-12-19T18:41:26.170 に答える