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

我会使用一个查询来解决这个问题,该查询将 SQL fromqFieldInnest作为子查询,并将INNER JOIN子查询用于entries表。

中的WHERE条款qFieldInnest对我来说具有挑战性。它也将挑战数据库引擎,因为它必须做大量的工作。

我没有什么可以测试的,所以不确定我是否在下面的 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 回答