Вопрос подзапроса в MS Access - PullRequest
2 голосов
/ 13 января 2010

Я не совсем уверен, почему следующий запрос не будет работать в Access. Он просит меня дать значение s1.sku


SELECT s1.SkuApexId, s1.sku, s1.apex, s1.btw, s1.gebruikernr, q2.*
FROM tblSkuApex AS s1,
              (SELECT MAX(s2.begindatum)
              FROM tblskuapex  s2
              WHERE s1.sku = s2.sku) q2

1 Ответ

4 голосов
/ 13 января 2010

Как вы говорите, вам требуется перекрестное соединение с таблицей q2, которое должно меняться в зависимости от значения s1.sku каждой записи таблицы s1, что недопустимо.

Я думаю, вы должны поместить подзапрос q2 как столбец, а не как таблицу. Поскольку вы извлекаете одно значение, его можно легко выразить так:

SELECT s1.SkuApexId, s1.sku, s1.apex, s1.btw, s1.gebruikernr, 
         (SELECT MAX(s2.begindatum)
              FROM tblskuapex  s2
              WHERE s1.sku = s2.sku) as maxbegindatum
FROM tblSkuApex AS s1

или даже лучше, почему вы не получаете его как обычную агрегацию, поскольку вы запрашиваете максимум из той же таблицы:

SELECT 
    s1.SkuApexId, s1.sku, s1.apex, 
    s1.btw, s1.gebruikernr, MAX(begindatum)
FROM tblSkuApex AS s1
group by 
    s1.SkuApexId, s1.sku, s1.apex, 
    s1.btw, s1.gebruikernr

примечание: вы можете опустить псевдоним s1 везде

...