在我的场景中,我有以下两个表:
表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,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
?我真的很感激!
编辑:
我需要将结果集返回映射值到SELECT AS查询中。
答案 0 :(得分:1)
您可能只需要使用IN
语句中的WHERE
子句
WHERE
(
tdc_doc_field_data.info_card_id = '[txtInfoCardNumber]')
AND (tdc_doc_field_def.field_name in (
'txtAppProposedChangeDesc',
'txtAppProposedChangeTechBasis',
'txtAppProposedChangeWorkConductedBy')
)
答案 1 :(得分: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]';