0

親をこのクエリから一意にしたい:

select 
  *, 
  (select state_name 
   from tbl_states 
   where state_id = tbl_cities.parent_id) as parent 
from 
  tbl_cities 
ORDER BY 
  parent

私は使用しようとしました:

select 
  *, 
  DISTINCT (select state_name 
            from tbl_states 
            where state_id = tbl_cities.parent_id) as parent 
from 
  tbl_cities 
ORDER BY 
  parent

しかし、それはエラーを出します。

4

3 に答える 3

0

用語の順序が正しくありません。あなたがしたい

select DISTINCT * ...
于 2013-02-19T22:46:07.110 に答える
0

構文的には、サブセレクト内に DISTINCT を配置する必要があります。

select * , 
 (select DISTINCT state_name 
  from tbl_states 
  where state_id = tbl_cities.parent_id) as parent 
from tbl_cities ORDER BY parent

複数の状態が発生する理由がわかりません。本当に同じ状態が繰り返されるのでしょうか。異なる状態がある場合は、別の問題があります。その場合、構文に関する限り、以下が機能します。

select * , 
 (select MAX(state_name) 
  from tbl_states 
  where state_id = tbl_cities.parent_id) as parent 
from tbl_cities ORDER BY parent

ただし、要件に対してセマンティクスが間違っている可能性があります。

于 2013-02-19T22:50:32.950 に答える
0

このように書き直して、ANSI 準拠の利点を追加してください。

select 
  c.*, parent.state_name
from 
  tbl_cities c
  left join (
    select 
      state_id, state_name 
    from 
      tbl_states 
    group by 
      state_id, state_name
  ) as parent 
  on parent.state_id = c.parent_id
order by 
  parent.state_name;
于 2013-02-19T22:51:21.077 に答える