PostrgreSQLのlibpqの上にドラフトリモートアプリケーションを作成しました。それはうまく動作しますが、アプリケーションの一般的な機能をプロファイルしました。私が生成する最終的なビジネス結果ごとに、40 tcpipを介してselect句のようなものを呼び出すことがあります。
SQL-Serverからの思い出があり、リモートアプリケーションとデータベースの間のやり取りの数を最小限に抑えるように促しています。選択を分析した結果、結合を使用してこの数を3つのSELECT
句に減らすことができると思います。しかし、SELECT
の結果を別のSELECT
で使用するための構文を覚えていません。
例えば。:
SELECT * FROM individual
INNER JOIN publisher
ON individual.individual_id = publisher.individual_id
WHERE individual.individual_id = 'here I would like to use the results of a another select'
この他のSELECT
は単純に次のようなものです。
SELECT identifier FROM another_table WHERE something='something'
これは簡略化されたテーブルレイアウトで、item_typesごとに何度も省略されています...
table passage
id_passage PK
business_field_passage bytea
table item
id_item PK
id_passage FK
business_field_item text
table item_detail
id_item_detail PK
id_item FK
business_field_item_detail text
image_content bytea
いくつかありますid_item
1人用id_passage
。
いくつかありますid_item_detail
1人用id_item
。
どう書くの?
1つの選択を別の選択にリダイレクトする(存在する場合)アクションを説明する名前は何ですか?
これはあなたが目指していることですか?比較されるフィールドが比較可能であることを確認してください(つまり、両方のフィールドが数値、テキスト、ブール値などです)。
SELECT * FROM Individual
INNER JOIN Publisher
ON Individual.IndividualId = Publisher.IndividualId
WHERE Individual.IndividualId = (SELECT someID FROM table WHERE blahblahblah)
複数の値に基づいて選択する場合:
SELECT * FROM Individual
INNER JOIN Publisher
ON Individual.IndividualId = Publisher.IndividualId
WHERE Individual.IndividualId IN (SELECT someID FROM table WHERE blahblahblah)
これを別の JOIN
に書き換えることができます。これは通常、最も単純で最速です。
SELECT i.*, p.*
FROM individual i
JOIN publisher p USING (individualid)
JOIN another_table a ON a.identifier = i.individualid
WHERE a.something = 'something'
また、やや簡略化し、識別子の不要なCamelCaseスペルを廃止しました。