2016-05-11 4 views
0

pl_rawから新しい名前のgameにチームを読み込むには、この関数を作成する必要があります。 すべてのデータをpl_rawにします。さて...この機能のテーブルのデータを注文するために...void関数内の 'something'節のようなフィールドの場合 - Postgresql

CREATE OR REPLACE FUNCTION loadGames() RETURNS void AS $$ 
BEGIN 

IF (SELECT * from pldata.pl_raw where venue = 'Away') THEN 
INSERT INTO definitiu.game (date_game, home_team, away_team) 
SELECT game_date, opposition_id,team_id from pldata.pl_raw; 

ELSIF (SELECT * from pldata.pl_raw where venue = 'Home') THEN 
INSERT INTO definitiu.game (date_game, home_team, away_team) 
SELECT game_date, team_id, opposition_id from pldata.pl_raw; 
END IF; 

END; $$ 
LANGUAGE PLPGSQL; 

関数compile、しかし、私はこの機能を実行するとPostgresはこのエラーを返す:

ERROR: subquery must return only one column LINE 1: SELECT (SELECT * from pldata.pl_raw where venue = 'Away') ^ QUERY: SELECT (SELECT * from pldata.pl_raw where venue = 'Away') CONTEXT: PL/pgSQL function loadgames() line 4 at IF

********** Error **********

ERROR: subquery must return only one column SQL state: 42601 Context: PL/pgSQL function loadgames() line 4 at IF

+0

エラーメッセージは明白です: 'select'ステートメントの結果は、どこかに格納しなければなりません。 'select'は何を返しますか?あなたはすべての列を取得しているようです。 'if'ステートメントは、多数の列を持つ行のリストではなく、ブール式を予期します。あなたは正確に何をしようとしていますか? –

+0

あなたがここで何をしようとしているのかは不明です。 'pl_raw'に入るデータをフィルタリングしようとしていますか?あるいは単に 'pl_raw'でデータを整理しようとしていますか?他のクエリのデータを整理しようとしているだけの場合は、その別のクエリで 'ORDER BY'を使うべきです。テーブルの順序は問題ではありません。 PostgreSQLは 'ORDER BY'がなくても好きな順番で行を返すことができます。 – jpmc26

答えて

0

使用することはEXISTS:

IF EXISTS (SELECT * from pldata.pl_raw where venue = 'Away') THEN 
+0

ありがとうございます!最初に試してみてください! :) –

関連する問題