1

私は本当に頭が真っ白です - このコードは、st.station_id を '1' の値から別の (ただし有効な) 数値に変更するが、その station_id のエントリがないエントリとは別に、非常にうまく行を選択します。 station_owner_map テーブル、組織テーブル、または cap_gen_data_table のいずれかで。基本的に、エントリのないテーブルを無視するようにSQLを修正する必要があります。

Select st.station_id, st.station_name , st.st_town, st.st_state, c1.country_name,   o1.organisation_name, som1.equity, st.river_basin, st.cost, st.cost_ref, st.comm_year,cg1.caporgen, ht1.hydro_name, cg1.value, srs1.srs_description, cg1.ref_year
FROM station st
inner join station_country_map scm1 on st.station_id = scm1.station_id
inner join country c1 on scm1.country_id = c1.country_id
inner join station_owner_map som1 on st.station_id = som1.station_id
inner join organisation o1 on som1.owner_id = o1.org_id
inner join cap_gen_data cg1 on st.station_id = cg1.station_id
inner join value_lookup vl1 on cg1.caporgen = vl1.id
inner join hydro_type ht1 on cg1.hydro_type_id = ht1.type_id
inner join station_record_status srs1 on cg1.capacity_status = srs1.st_rec_stat_id
where st.station_id = 1
4

2 に答える 2

2

それはあなたinner joinのせいです。Inner joinレコードが結果セットに表示されるには、両方のテーブルに値が存在する必要があることを意味します。

代わりに使用left joinすると、「左側」のテーブルだけが値を持つ必要があります。

于 2013-08-09T15:50:24.587 に答える
0

left値が存在しない可能性があるテーブルで結合を 使用します。

2 つのテーブルがAあり、内部結合では、結合条件が満たさBれた行のみが返されます。結合は、結合条件が満たされているかどうかに関係なく、すべてAleft行を返します。A左結合が使用されている場合、関連付けられた select ステートメントの列はBnull になります。

left joinあなたが示した表にのみ追加しました。他のテーブルが結合条件を満たさない可能性がある場合は、結合タイプを からinnerに変更しleftます。

Select st.station_id, st.station_name , st.st_town, st.st_state, c1.country_name,   o1.organisation_name, som1.equity, st.river_basin, st.cost, st.cost_ref, st.comm_year,cg1.caporgen, ht1.hydro_name, cg1.value, srs1.srs_description, cg1.ref_year
FROM station st
inner join station_country_map scm1 on st.station_id = scm1.station_id
inner join country c1 on scm1.country_id = c1.country_id
left join station_owner_map som1 on st.station_id = som1.station_id
left join organisation o1 on som1.owner_id = o1.org_id
left join cap_gen_data cg1 on st.station_id = cg1.station_id
inner join value_lookup vl1 on cg1.caporgen = vl1.id
inner join hydro_type ht1 on cg1.hydro_type_id = ht1.type_id
inner join station_record_status srs1 on cg1.capacity_status = srs1.st_rec_stat_id
where st.station_id = 1
于 2013-08-09T15:46:45.057 に答える