Нужна помощь в разработке оператора SQL - PullRequest
0 голосов
/ 02 августа 2011

Я не гуру SQL, во всяком случае, и мне трудно обдумывать, как выполнить определенный запрос SQL.

У меня есть три таблицы базы данных Oracle, MBRHISTDETL, LOCINFODETL и METERCHGDETL.От MBRHISTDETL я получу следующие поля: MBRSEP, LOCATION, BILLTYPE, BILLMOYR, KWH.От LOCINFODETL (LOCATION является ключевым) я получу DIST, CYCLE, ADDR1.Из METERCHGDETL (MBRSEP является ключевым) я получу METER.

До сих пор, используя мой запрос ниже, я могу получить всю необходимую информацию из MBRHISTDETL и LOCINFODETL.Однако сейчас я не совсем понимаю, как добавить следующую таблицу, METERCHRDETL, в оператор запроса.Может ли кто-нибудь помочь мне с этим?

Вот мой запрос, пока:

SELECT LOCINFODETL.LOCATION AS L.LOCATION, 
    LOCINFODETL.DIST, LOCINFODETL.CYCLE,
    LOCINFODETL.ADDR1, MBRHISTDETL.MBRSEP, 
    MBRHISTDETL.LOCATION AS M.LOCATION, 
    MBRHISTDETL.BILLTYPE, MBRHISTDETL.BILLMOYR, 
    MBRHISTDETL.KWH
FROM MBRHISTDETL 
    INNER JOIN L.LOCINFODETL ON H.MBRHISTDETL.LOCATION = L.LOCATION
WHERE MBRHISTDETL.BILLTYPE = '09' 
  AND CAV_MBRHISTDETL.BILLMOYR <> '9999' 
  AND SUBSTR(LOCINFODETL.CYCLE,0,2) = '04' 
  AND LOCINFODETL.DIST = '16' 

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

Это должно помочь вам начать - но вам нужно знать, какое поле связывает вашу таблицу М.

Кроме того - просто совет по стилю - если вы пытаетесь разобраться в SQL впервые, особенно - вы сможете намного проще проверить свой SQL, если отформатируете его немного более устно , Мой стиль, возможно, не самый лучший, но вы можете увидеть, облегчает ли его чтение для вас.

SELECT
   L.LOCATION AS L_LOCATION, 
   L.DIST, 
   L.CYCLE,
   L.ADDR1, 
   H.MBRSEP, 
   H.LOCATION AS H_LOCATION, 
   H.BILLTYPE, 
   H.BILLMOYR, 
   H.KWH,
   M.METER
FROM 
      MBRHISTDETL H
   INNER JOIN 
      LOCINFODETL L 
   ON 
      H.LOCATION = L.LOCATION
   INNER JOIN
      METERCHRDETL M
   ON M.___KEY___ = H.___KEY___ -- or perhaps L.___KEY___
WHERE 
       H.BILLTYPE = '09' 
   AND H.BILLMOYR <> '9999' 
   AND SUBSTR(L.CYCLE,0,2) = '04' 
   AND L.DIST = '16' 
0 голосов
/ 02 августа 2011

Примерно так должно работать, хотя я не на 100% использую префиксы, которые вы используете.

SELECT LOCINFODETL.LOCATION AS L.LOCATION, 
    LOCINFODETL.DIST, LOCINFODETL.CYCLE,
    LOCINFODETL.ADDR1, MBRHISTDETL.MBRSEP, 
    MBRHISTDETL.LOCATION AS M.LOCATION, 
    MBRHISTDETL.BILLTYPE, MBRHISTDETL.BILLMOYR, 
    MBRHISTDETL.KWH, METERCHGDETL.METER
FROM MBRHISTDETL 
    INNER JOIN L.LOCINFODETL ON H.MBRHISTDETL.LOCATION = L.LOCATION
    INNER JOIN METERCHGDETL ON H.MBRHISTDETL.MBRSEP = METERCHGDETL.MBRSEP 
WHERE MBRHISTDETL.BILLTYPE = '09' 
  AND CAV_MBRHISTDETL.BILLMOYR <> '9999' 
  AND SUBSTR(LOCINFODETL.CYCLE,0,2) = '04' 
  AND LOCINFODETL.DIST = '16' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...