• ベストアンサー

副問い合わせの使い方

ORACLEの経験はあるのですが、初めてPOSTGRESQLを使用します。 ORACLEと同様にSQL文で副問い合わせを行いたいのですがどうもうまくいきません。 select winner from (select winner from  t_play_data); と検索するとエラーになってしまいます。 SELECT ~ from ・・・ の ・・・の部分に(SELECT ~)と 副問い合わせをすることはできますでしょうか。 バージョンは 7.0.2です。 ************************************ ** 普通に検索すると検索できます。 ************************************ tsuka000jp4=> select winner from t_play_data; winner ------------- tsuka000jp palalaika ************************************************ ** 以下は副問い合わせの例ですが、 ** 副問い合わせをすると以下のようなエラーが出 ** てしまいます。 **************************************************tsuka000jp4=> select winner from (select winner from t_play_data); ERROR: parser: parse error at or near "select"

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

残念ながら、バージョン7.1以降でないとFROM句でのサブクエリーの使用は出来ないようです。 7.1以降であれば、#1の方の方法で出来ると思います。

参考URL:
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/x14442.html
tsuka000jp
質問者

お礼

そうだったんですか~ 貴重な情報ありがとうございまいした~。 どうりで一生懸命あれこれやってもだめなわけだ・・・ どうもありがとうございました。m(_ _)m

その他の回答 (1)

noname#86752
noname#86752
回答No.1

select winner from (select winner from t_play_data) as a; と、インラインビューの部分に as で別名をつけたらどうでしょう?

tsuka000jp
質問者

補足

おお、さっそくの解答ありがとうございます。m(_ _)m 試しにじっこうしたところ、残念ながらだめでした。 tsuka000jp4=> select winner from (select winner from t_play_data) as a; ERROR: parser: parse error at or near "select"

関連するQ&A

  • 副問い合わせについて

    お世話になります。明日から仕事で使うのですが、下記の構文が よく理解できません。宜しくお願い致します。 SQL Severは経験ありません。 経験はInfomixSql,Access,MySql程度です。 (1)行副問い合わせ(副問い合わせの結果が1行n列で返ってくる) SELECT * FROM t1 WHERE (c4, c2) = (SELECT MAX(c1), 'a' FROM t2); このwhere節の結合条件はどのような感じになるのでしょうか? (2)表副問い合わせ(副問い合わせの結果がm行n列(表)で返ってくる) SELECT * FROM t1 WHERE c4 IN ( SELECT c1 FROM t2 WHERE c4 >= 10 ) ORDER BY c1; 、 SELECT x1.c1, x2.y4 FROM t1 x1, ( SELECT c3, SUM(c4) AS y4 FROM t2 GROUP BY c3) AS x2 WHERE x1.c3 = x2.y4 ORDER BY c1; (1)に同じです。 参考になりそうなサイトでも結構ですので 宜しくお願い致します。

  • SQL副問い合わせ内のエイリアス

    DEPARTMENTとEMPLOYEESのテーブルがあり、そこから社員のいない部署を取得しようとしているのですが、わたしの書いたSQLがうまく動きません。作動しない理由をご教授くだされば助かります。オラクル8.1.7.4.1で動作させなければならず、left outer joinが使えないところからの質問です。 データはこういう構造です(*がプライマリーキィを表す)。 DEPARTMENT: *DEPT__T, DEPT_NAME, .... EMPLOYEES: *EMPLOYEES__T, DEPT_NAME, ... これに対して、 select dept__t, (select count(*) from employee where department.dept__t = employees.dept__t) counter from department where counter = 0 というSQLで社員のいない部署を取ろうとしたのですが、ORA-00904: "COUNTER": invalid identifier.が返されてしまいます。 WHERE文にcounterというエイリアスではなくカラムそのものを書くと問合せが正常に作動するのですが、なぜでしょうか。オラクルのバージョンが古いことが原因でしょうか。

  • mysql で副問い合わせができない (長文)

    レンタルサーバー上のmysqlで副問い合わせがうまくできません お手数おかけしますが、何か情報をいただけましたら幸いです 【質問内容】 レンタルサーバー上のmysqlで副問い合わせがうまくできない 【詳細】 ローカルPC上 の mysql で 副問い合わせをするとうまくいくのですが レンタルサーバー上では syntax エラーが出てしまいます ●状況1 たとえば ローカルPC上のmysql で select * from (SELECT * FROM ronbun_art_tbl) AS TBL_B; を実行すると正しく結果を返すのですが レンタルサーバー上だと エラーとなる ●状況2 レンタルサーバー上で SELECT * FROM ronbun_art_tbl は結果をちゃんと返すのですが select * from (SELECT * FROM ronbun_art_tbl) AS TBL_B; をはエラーとなる 【その他の情報】 サーバー ハッスルサーバー mysqlバージョン 4.0.24 ローカルのmysql 4.1 【エラーの内容】 #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM ronbun_art_tbl ) AS TBL_B LIMIT 0, 30' at line 1

    • ベストアンサー
    • MySQL
  • IN句に副問合わせを使う場合と使わない場合

    お世話になります。 SQLについての質問です。 RDBMSはSymfowareです。 IN句に副問い合わせを指定するSQLと その副問い合わせの結果を直接IN句に記載したSQLで 結果が異なってしまいます。 こういうことってありますでしょうか。 以下のようなSQLです。 (1) SELECT * FROM T1 WHERE T1.column_A IN ( SELECT T2.column_A FROM T2 WHERE T2.column_B='XXXX' ) 上記IN句内のSELECT文の結果は、'A'、'B'、'C'、'D'です。 (2) SELECT * FROM T1 WHERE T1.column_A IN ('A','B','C','D') この(1)、(2)のSQLの結果が異なってしまいます。 私の環境では(1)では0件、(2)では2件ヒットします。 なぜこのようになるのかわかる方がいらっしゃいましたら ご教授ください。 ちなみに、DBを操作して、副問い合わせのSELECT文の結果を 'A'、'B'とすると同じ結果が得られます。 副問い合わせのSELECT文の結果が3件以上になると(1)のSQLの 結果は0件になってしまいます。 RDBMSの障害でしょうか・・・? それとも、IN句に副問い合わせを使用する場合、 その副問い合わせの結果は2件以下にする必要がある なんてルールがあったりするのでしょうか。

  • 副問い合わせについて

    お世話になっております。 Oracle初心者です。 下記(1)~(3)までの内容を経て(4)のSELECT文が出来る様に FROM句や副問い合わせを考えていたのですが、 私にはまだ出来ませんでした。 どなたかご親切な方、ご教示頂きたく宜しくお願い致します。          記 (1) select ID,入庫数 from 入庫台帳 group by ID,入庫数 (2) select ID,出庫数 from 出庫台帳 group by ID,出庫数 (3) 現在庫数=入庫数-出庫数 (入庫台帳のID=出庫台帳のID) (4) SELECT ID,品番,品名,現在庫数

  • csvデータをPostgreSQLにインポート

    RedHat8.0にpostgresql-7.2.3.tar.gzをインストールしています。database_6に接続し、 database_6=# COPY tablename FROM '/var/test/testdata.csv' WITH CSV; を実行すると(tablenameとtestdataとは同一名にしてあります)、 ERROR: parser: parse error at or near "csv" と表示されてしまいます。どこが悪いのでしょうか?

  • 副問い合わせで複数の列を返す

    こんにちは、Makotoと申します。 SQLの副問い合わせで質問があるのですが、 現在のSQLは CREATE OR REPLACE VIEW VIWTEST AS SELECT KOMOKU1, KOMOKU2 (SELECT SUM(KOMOKU3) FROM TBL WHERE A = 1 (SELECT SUM(KOMOKU4) FROM TBL WHERE A = 1 (SELECT SUM(KOMOKU5) FROM TBL WHERE A = 1 FROM M_TBL; という感じのSQLなのですが、副問い合わせの所 が見ているテーブルも条件も一緒なので1つにまとめたいのですが、うまくいきません。CURSORという関数があったのですが、VIEWでは使用できませんでした。なにかよい方法はないでしょうか? 開発環境は oracle 9i(AIX) pro*C/C++ でおこなっています。

  • 副問い合わせの限界値はどれくらいなのでしょうか? 

    副問い合わせの限界値はどれくらいなのでしょうか?  現在下記のようなSQLを考えています。 SELECT * FROM A_TABLE WHERE a_field in ( SELECT a_field FROM B_TABLE WHERE b_field := ?c ) ; ※(便宜上、外部変数の指定を[:= ?c]としました) B_TABLEの検索に引っかかったデータをinの条件にしてA_TABLEを検索するのですが、 B_TABLEの検索で出力される結果(サブクエリで出力される件数)が 現在の理論値は平均でおおよそ1000件、最大10万件になる予定です。 これに対し、10万件での問い合わせに副問い合わせの実行はmysqlで可能なのでしょうか?  現状のテスト環境では10万件のテストデータを用意できない状況です・・・。 また、どなたか副問い合わせでのサブクエリ出力件数の限界値をご存知の方がいらっしゃいましたらご教授頂ければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 副問い合わせの書き方について

    以下のようにテーブルを作成され、データが 格納されています。 CREATE TABLE IDLIST( MAINID number(1), SUBID number(1), FLAG number(1), NAME varchar(10) ); MAINID SUBID FLAG NAME ---------- ---------- -- -------------------- 1 1 1 佐藤様 1 2 0 佐藤さん 1 3 0 佐藤 2 1 1 田中さん 2 2 0 田中 このデータにおいて、FLAGが1であるNAMEをその他の 同一IDにコピーしたいと考えています。 つまり、期待する実行結果は以下のようになります。 MAINID SUBID FLAG NAME ---------- ---------- -- -------------------- 1 1 1 佐藤様 1 2 0 佐藤様 1 3 0 佐藤様 2 1 1 田中さん 2 2 0 田中さん SQL文を以下のように考えてみましたが、 update IDLIST set NAME = ( select NAME from IDLIST where MAINID = ( select MAINID from IDLIST where FLAG = 1) AND FLG = 1 ); この場合はMAINIDが複数のとき、副問い合わせにて 結果が複数あるため、エラーが発生します。 複数返ってくる結果をどのように処理してあげれば よいか困っています。 是非とも1つのSQLで実現させたいと考えています ので、知恵をお貸し頂きたいと思います。 よろしくお願い致します。

  • 副問合せ

    問題:NATION表とINVENTION表より人口密度(人口/面積)が100以下の国で、発明事項がある国の国コードを表示する。 方法1:主問合せでNATION表を利用する 方がうまくいきません。 私の考えた下記SQL文では実行結果が80件返ってしまいます。 答えは方法2と同じ5件ですがどこが悪いのでしょうか? 回答のほどよろしくお願い致します。 方法1:主問合せでNATION表を利用する SELECT CODE FROM NATION WHERE (POPULATION / AREA) <=ANY(SELECT 100 FROM INVENTION) 方法2:主問合せでINVENTION表を利用する SELECT DISTINCT NATION_CODE FROM INVENTION WHERE NATION_CODE = ANY(SELECT CODE FROM NATION WHERE 100 >= POPULATION / AREA) NATION_CODE ----------- 107 136 142 154 157