2011-04-17 37 views
0

在我的情況我有以下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 field_names我需要得到,txtAppProposedChangeDesctxtAppProposedChangeTechBasistxtAppProposedChangeWorkConductedBy

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

需要幫助擴大這一幫我拿三個,txtAppProposedChangeDesctxtAppProposedChangeTechBasistxtAppProposedChangeWorkConductedBy?我真的很感激它!

編輯:

我需要返回結果集到映射值代入我的選擇作爲查詢。

回答

1

也許你只需要使用IN子句中的WHERE聲明

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

這是越來越近了,但字段名稱後面AS查詢我如何映射到我的選擇?我需要'txtAppProposedChangeDesc'映射到'txtProposedChange'和'txtAppProposedChangeTechBasis'以映射到'txtAppProposedChangeTechBasis'。如果我做了「SELECT *」,它不會映射數據。 – Mark 2011-04-17 16:48:18

+0

@Mark - 你的意思是你需要3列返回這些具體的名稱每一個? – pcofre 2011-04-17 21:25:54

+0

這是正確的。 – Mark 2011-04-18 02:12:33

0

假設鍵定義如下:

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