开发者

Need multiple results from DB Query

In my scenario I have the following 2 tables:

Table 1: tdc_doc_field_def

Column 1: field_id
Column 2: field_name

Table 2: tdc_doc_field_data开发者_C百科

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

Inside of Table 1 I have 3 field_names I need to get, txtAppProposedChangeDesc, txtAppProposedChangeTechBasis and txtAppProposedChangeWorkConductedBy.

Inside of Table 2 is the field_data for those fields.

What I need is a parameterized query that if I specify the info_card_id I am able to get the 3 fields of data. I have the following query that will get me the data from one field name data but not all three:

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')

Need help to expand this to help me get all three, txtAppProposedChangeDesc, txtAppProposedChangeTechBasis and txtAppProposedChangeWorkConductedBy? I'd really appreciate it!

EDIT:

I need to return the result set into the mapped values into my SELECT AS query.


Probably you just need to use the IN clause in the WHERE statement

WHERE
(
tdc_doc_field_data.info_card_id = '[txtInfoCardNumber]') 
AND (tdc_doc_field_def.field_name in (
    'txtAppProposedChangeDesc',
    'txtAppProposedChangeTechBasis',
    'txtAppProposedChangeWorkConductedBy')
)


Assuming the keys are defined as follows:

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

You should be able to find what you want with the following query:

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;

Or alternatively, if you have a info_card table, something like this should also work:

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]';
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜