Нужно несколько результатов из БД Query - PullRequest
0 голосов
/ 17 апреля 2011

В моем сценарии у меня есть следующие 2 таблицы:

Таблица 1: tdc_doc_field_def

Column 1: field_id
Column 2: field_name

Таблица 2: tdc_doc_field_data

Column 1: info_card_id
Column 2: field_id
Column 3: field_data

Внутри Table 1 У меня есть 3 поля, которые мне нужно получить, txtAppProposedChangeDesc, txtAppProposedChangeTechBasis и txtAppProposedChangeWorkConductedBy.

Внутри Table 2 находится field_data для этих полей.

Мне нужен параметризованный запрос, который, если я укажу info_card_id, я смогу получить 3 поля данных. У меня есть следующий запрос, который получит данные из одного имени поля, но не из всех трех:

SELECT
    tdc_doc_field_data.field_data AS txtProposedChange
FROM  tdc_doc_field_def 
INNER JOIN tdc_doc_field_data 
    ON tdc_doc_field_def.field_id = tdc_doc_field_data.field_id
WHERE
    (tdc_doc_field_data.info_card_id = '[txtInfoCardNumber]') 
    AND (tdc_doc_field_def.field_name = 'txtAppProposedChangeDesc')

Нужна помощь, чтобы расширить это, чтобы получить все три, txtAppProposedChangeDesc, txtAppProposedChangeTechBasis и txtAppProposedChangeWorkConductedBy? Буду очень признателен!

EDIT:

Мне нужно вернуть набор результатов в сопоставленные значения в мой запрос SELECT AS.

Ответы [ 2 ]

1 голос
/ 17 апреля 2011

Возможно, вам просто нужно использовать предложение IN в операторе WHERE

WHERE
(
tdc_doc_field_data.info_card_id = '[txtInfoCardNumber]') 
AND (tdc_doc_field_def.field_name in (
    'txtAppProposedChangeDesc',
    'txtAppProposedChangeTechBasis',
    'txtAppProposedChangeWorkConductedBy')
)
0 голосов
/ 18 апреля 2011

Предполагая, что ключи определены следующим образом:

tdc_doc_field_def(field_id)
tdc_doc_field_def(field_name)
tdc_doc_field_data(info_card_id, field_id)

Вы сможете найти то, что хотите, с помощью следующего запроса:

select a.info_card_id
      ,max(case when b.field_name = 'txtAppProposedChangeDesc' 
                then a.field_data end) as txtAppProposedChangeDesc
      ,max(case when b.field_name = 'txtAppProposedChangeTechBasis' 
                then a.field_data end) as txtAppProposedChangeTechBasis
      ,max(case when b.field_name = 'txtAppProposedChangeWorkConductedBy' 
                then a.field_data end) as txtAppProposedChangeWorkConductedBy
  from tdc_doc_field_data a
  join tdc_doc_field_def  b using(field_id)
 where a.info_card_id = '[txtInfoCardNumber]'
   and b.field_name in(
           'txtAppProposedChangeDesc'
          ,'txtAppProposedChangeTechBasis'
          ,'txtAppProposedChangeWorkConductedBy'
       )
 group 
    by a.info_card_id;

Или, если у вас естьinfo_card таблица, что-то вроде этого также должно работать:

select a.info_card_id
      ,b1.field_data as txtAppProposedChangeDesc
      ,c1.field_data as txtAppProposedChangeTechBasis
      ,d1.field_data as txtAppProposedChangeWorkConductedBy
  from info_card a
  left join tdc_doc_field_data b1 on(a.info_card_id = b1.info_card_id)
  left join tdc_doc_field_def  b2 on(
       b2.field_id   = b1.field_id
   and b2.field_name = 'txtAppProposedChangeDesc'
  )    
  left join tdc_doc_field_data c1 on(a.info_card_id = c1.info_card_id)
  left join tdc_doc_field_def  c2 on(
       c2.field_id   = c1.field_id
   and c2.field_name = 'txtAppProposedChangeTechBasis'
  )
  left join tdc_doc_field_data d1 on(a.info_card_id = d1.info_card_id)
  left join tdc_doc_field_def  d2 on(
       d2.field_id   = d1.field_id
   and d2.field_name = 'txtAppProposedChangeWorkConductedBy'
  )
 where a.info_card_id = '[txtInfoCardNumber]';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...