1

私はphpプロジェクトでpostgresqlデータベースを使用しており、クエリを作成しようとしています。これがシナリオです。

FOO と BAR という複数のテーブルがあるとします。

テーブル FOO は次のようになります。

| | foo_id | foo_name | foo_data |
----------------------------------
| | 1 | ジョン | 息子 |
| | 2 | ジェーン | 娘 |
| | 3 | サム | 息子 |
| | 4 | サリー | 娘 |

テーブルBARはこんな感じ

| | bar_id | bar_foo_id | bar_fooParent_id | bar_content |
----------------------------------
| | 1 | 1 | 1 | ヤバダバドゥー|ヤバダバドゥー|
| | 2 | 2 | 1 | スクービー・スクービー・ドゥー|
| | 1 | 3 | 888 | 牛を飼ってはいけない |
| | 2 | 4 | 999 | ああ!| |

テーブル スキーマを変更できません。すべてがそのままです。

しかし、私は PHP を介して値を渡すことができます。それを PARENT と呼びましょう。

そして - テーブル FOO の foo_id は、テーブル BAR の bar_foo_id にマップされます。

テーブル FOO と BAR の両方のデータを結合する SELECT クエリを作成したいと思います。何かのようなもの:

SELECT BAR.bar_content, (and other BAR.columns) , FOO.foo_name, FOO.foo_data 
FROM FOO,BAR WHERE bar_fooParent_id=".$PARENT." AND " ...?

どこ ?少し紛らわしいです。

テーブル BAR から選択した行に基づいて、テーブル FOO から foo_name と foo_data の行を取得する必要があります。したがって、値 1 が $PARENT に渡された場合、bar_fooParent_id は 1 になり、テーブル BAR から最初の 2 行を取得し、それぞれの bar_foo_id (値 1 と 2) を使用してテーブルの行からデータを取得します。 1 と 2 の foo_id を持つ FOO (この場合は最初の 2 行)。

以下のようなステートメントを試してみました (簡単にするために、値はハードコードされています)

SELECT * from BAR,FOO where BAR.bar_fooParent_id=1 AND (BAR.foo_id=1 OR BAR.foo_id=2) AND (FOO.foo_id=1 OR FOO.foo_id=3)

また

select * from BAR where BAR.barr_fooParent_id=1 IN (SELECT foo_id,foo_name from kid WHERE foo_id=1 OR foo_id=3 ) 

あまり成功せずに。基本的に、データは理想的には次のように返されるはずです

foo_name | foo_data | bar_content | その他の BAR 列 ... |
_________________________________________________________________
ジョン | 息子 | ヤバダバド | など |
ジェーン | 娘 | スクービードゥービード| など |

(書式設定についてお詫びします。この 3 番目の結果の表で何が起こっているのかわかりません)

この SELECT クエリを postgreSQL 用に作成する際に誰かが手を貸してくれれば幸いです。

何か案は?ありがとう。

エドワード

4

1 に答える 1

5

必要なのは単純な結合だけのようです。

SELECT f.foo_name, f.foo_data, b.bar_content
FROM foo f
INNER JOIN bar b ON b.bar_foo_id = f.foo_id
WHERE b.bar_fooParent_id = 1
于 2013-01-04T22:16:56.567 に答える