Как написать SQL коррелированные подзапросы - PullRequest
0 голосов
/ 15 марта 2019

У меня есть два стола ItemsDetails и ItemsSquare

**ItemsDetails** table have following column

ItmDtlId P.K

Itmid F.K

AssetId F.k

Qty 

TDate

Approved

**ItemsSquare** table have following column

ItmSqrId P.k

ItmDtlId F.k

ItmSqQty

Date

Из таблицы ItemsDetails . Я хочу показать все записи из таблицы ItemDetails , а также записи из таблицы ItemsSquare , которая имеет ItmDtlId такой же, как в ItemDetails , а затем сравните количество из таблицы ItemDetails и таблицы Itemsquare как Qty> ItmSqQty

в основном я хочу получить доступ к столбцам ItemsSquare таблицы из ItemDetails на основе таблицы или ItmDtId поскольку нет связи первой таблицы со второй таблицей

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

Вот мой sql запрос

SELECT itd.ItmDtlId
     , it.Itmid
     , itd.Qty
     , itd.Approved
     , as.Assetid
     , as.Assetname
     , itd.TDate 
  from ItemsDetails itd
  join Item it 
    on itd.Itmid = it.Itmid
  join Assets as 
    on itd.Assetsid = as.Assetsid
 WHERE itd.Approved = 1 
   and itd.ItmDtlId = (SELECT itd.ItmDtlId FROM ItemsSquare its WHERE itd.ItmDtlId = its.ItmDtlIdand itd.Qty > ItmSqQty) 

Подскажите, пожалуйста, как мне эффективно написать подзапрос Sql, чтобы получить желаемый результат

1 Ответ

0 голосов
/ 15 марта 2019

Возможно ли, что вы неверно ссылаетесь на подзапрос?

Вместо:

...
AND itd.ItmDtlId = (
    SELECT itd.ItmDtlId 
    FROM ItemsSquare its
    WHERE itd.ItmDtlId = its.ItmDtlIdand
      AND itd.Qty > its.ItmSqQty
)

Кому:

...
AND itd.ItmDtlId = (
    SELECT its.ItmDtlId 
    FROM ItemsSquare its
    WHERE itd.ItmDtlId = its.ItmDtlIdand
      AND itd.Qty > its.ItmSqQty
)
...