1

複数のテーブル間の結合を作成するクエリを作成しようとしています。次に例を示します。

select b.name as state, c.name as city, sum(qnt) as total_quantity 
from qtn_table a, state_table b, city_table c
where a.state_id = b.id and a.city_id = c.id
and a.year = 2011 and a.product = 1 group by b.name, c.name

また、内部結合で試しました:

select b.name as state, c.name as city, sum(qnt) as total_quantity 
from qtn_table a
inner join state_table b ON a.state_id = b.id
inner join city_table c ON a.city_id = c.id
where a.year = 2011 and a.product = 1 group by b.name, c.name

そして結果は同じです。

独自の状態のみで都市を返すことになっていました。

state    city    total_quantity
NY       A
NY       B
Texas    C
Texas    D
Cali     E
Cali     F

しかし、次のような奇妙な結果を返しています。

state    city     total_quantity
NY       A
Texas    A
Cali     A
NY       B
...
...

典型的なクロス ジョインでは、すべての州で都市 A に表示されるはずですが、すべての州ではなく一部の州に表示されているだけであり、さらに奇妙な状況です。

私は何を間違っていますか?

4

1 に答える 1

3

state_tabletoからの結合が欠落しcity_tableており、そのテーブル内の各州、または同じ名前の都市を持つ各州の行を返しています (少なくともそうであるように見えます)。AND state_table.state = city_table.state私はあなたのクエリに追加しました

select b.name as state, c.name as city, sum(qnt) as total_quantity 
from qtn_table a
 inner join state_table b ON a.state_id = b.id
 inner join city_table c ON a.city_id = c.id AND state_table.state = city_table.state
where a.year = 2011 
and a.product = 1 
group by b.name, c.name
于 2013-03-06T16:48:14.720 に答える