first_table
f_idf_name
1鈴木
2田中
3佐藤
last_table
l_idl_name
1一郎
1二郎
2太郎
3次郎
欲しい結果
idf_namel_name1l_name2
1鈴木一郎二朗
2田中太郎(空白もしくはNULL)
3佐藤次郎(空白もしくはNULL)
PHP4.3.2とPostgresql7.4.29の環境です。
first_tableとlast_tableの2つのテーブルがあって、
欲しい結果のような表を作成したいです。
l_name1やl_name2でのキーワード検索も行いたいので、1つのSQL文を発行したいのですが、
どのように書けば良いのでしょうか?
last_tableを自己結合し、first_tableと結合するのが近い気がするのですが。
SELECT * FROM first_table AS f
INNER JOIN (
SELECT l1.l_id, l1.l_name AS l_name1, l2.l_name AS l_name2
FROM l_table AS l1, l_table AS l2
WHERE l1.l_name > l2.l_name
AND l1.l_id = l2.l_id
) AS l
ON f.f_id=l.l_id
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
名前のテーブルは繰り返して結合すことになるので、一般的には無理です。
ただし、名前のテープルがせいぜい10種類くらいであれば、
outer joinで10個程度をつなげることでは可能です。
新しいバージョンであれば、with recursive では実現可能です。
No.2
- 回答日時:
VIEW を使ってみてはいかがですか。
CREATE TEMPORARY VIEW tmpview AS 《さきほどのSQL》;
SELECT * FROM tmpview WHERE l_name1='○○';
PostgreSQL のバージョンが古いので、
TEMPORARY VIEW が使えないかもしれません。
その場合には「TEMPORARY」を削除すれば
VIEW が永続的に残りますが動くと思います。
回答ありがとうございます。
以下のようなSQLだとエラーになってしまいます。
CREATE TEMPORARY VIEW tmpview AS
SELECT F.f_id,F.f_name,
(SELECT L.l_name FROM last_table L
WHERE L.l_id=F.f_id ORDER BY L.l_name
LIMIT 1 OFFSET 0) AS l_name1,
(SELECT L.l_name FROM last_table L
WHERE L.l_id=F.f_id ORDER BY L.l_name
LIMIT 1 OFFSET 1) AS l_name2
FROM first_table F;
No.1
- 回答日時:
こんな感じでいかがでしょう。
SELECT F.f_id,F.f_name,
(SELECT L.l_name FROM last_table L
WHERE L.l_id=F.f_id ORDER BY L.l_name
LIMIT 1 OFFSET 0) AS l_name1,
(SELECT L.l_name FROM last_table L
WHERE L.l_id=F.f_id ORDER BY L.l_name
LIMIT 1 OFFSET 1) AS l_name2
FROM first_table F;
回答ありがとうございます。
表示は希望通りで完璧なのですが、
l_name1やl_name2で検索をしようとするとエラーになってしまいます。
検索まで出来ればいうことないのですが。
(f_idやf_nameでの検索は出来ます。)
例えば、
上記のSQL文に
WHERE l_name1 = '一郎'
を付け加えて検索しようとすると、「column "l_name1" does not exist」というエラー
上記のSQL文に
WHERE l_name = '一郎'
を付け加えて検索しようとすると、「column "l_name" does not exist」というエラー
上記のSQL文に
WHERE L.l_name1 = '一郎'
を付け加えて検索しようとすると、「relation "l" does not exist」というエラー
上記のSQL文に
WHERE L.l_name = '一郎'
を付け加えて検索しようとすると、「relation "l" does not exist」というエラー
となってしまいます。
こちらの解決方法も分かれば教えて下さい。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL mysqlの結合について教えてください 1 2022/05/19 15:13
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Visual Basic(VBA) 先ほど、回答者様によって教えていただいたのですがどうしたらいいか分かりません。 ユーザーフォーム上に 2 2023/02/21 22:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルからのselectにおいて...
-
postgreSQLのint型は桁数指定が...
-
2つの異なるテーブルを和結合し...
-
賢いSQL文がわからない
-
チェックボックスから、データ...
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
Access レコードを追加できませ...
-
異なるスキーマからデータを抽...
-
datapumpの実行方法について
-
ORA-00959: 表領域'****'は...
-
Data Pump で大量データインポ...
-
DELETE文でFROM句を省略した場合
-
Oracle10gで他のスキマーのテー...
-
INDEXの無効化
-
エクセルからアクセスにインポ...
-
CLOB型へのINSERT
-
ACCESS 複数テーブル・複数フィ...
-
count(1)とcount(*)の違い
-
検索結果の列数を動的に変更したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
postgreSQLのint型は桁数指定が...
-
テーブルからのselectにおいて...
-
クエリアナライザのsp_helpコマ...
-
UNIQUEをつけたときのINDEXテー...
-
PostgressからMySQL(MariaDB)...
-
pl/pgsqlで変数の扱い
-
SQL SELECT文 別テーブルのレコ...
-
SQLで検索結果の記事を表示したい
-
3つのテーブルの処理について
-
PostgreSQLでの複数結果のまとめ方
-
PostgresSQL8.4でツリー上に取...
-
賢いSQL文がわからない
-
SQL文作成のお願い
-
postgreSQLの正規表現
-
テーブル作成 外部参照 配列
-
もうちょっと賢いSELECT文が書...
-
Postgresqlの自己結合について
-
2つの異なるテーブルを和結合し...
-
チェックボックスから、データ...
-
全テーブルのデータの行数
おすすめ情報