Vytvořil jsem návrh vzdálené aplikace na vrcholu libpq pro PostrgreSQL. Chová se dobře, ale profiloval jsem obecné fungování aplikace. Pro každý konečný obchodní výsledek, který produkuji, se stává, že volám něco jako 40 select klauzule (přes tcpip).
Mám připomínky z SQL-Serveru, které mi připomínají, abych minimalizoval počet interakcí mezi mou vzdálenou aplikací a databází. Po analýze mých výběrů si myslím, že bych mohl snížit toto číslo na 3 SELECT
klauzulí, pomocí spojení. Ale nepamatuji si syntaxi pro použití výsledku SELECT
v jiném SELECT
.
Např.:
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'
Tento další SELECT
by byl jednoduše takového druhu:
SELECT identifier FROM another_table WHERE something='something'
Zde je zjednodušené rozložení tabulek, několikrát odmítnuto pro různé typy item_types ... (3 zcela odlišné typy, tedy 3 dotazy SQL, pokud jsou optimalizovány).
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
Existuje několik id_item
pro jednoho id_passage
.
Existuje několik id_item_detail
pro jednoho id_item
.
Jak byste to napsali?
Jaký je název pro popis akce přesměrování jednoho výběru do jiného (pokud existuje)?
To je to, na co se zaměřujete? Ujistěte se, že porovnávaná pole jsou srovnatelná (tj. Obě pole jsou numerická, textová, logická atd.).
SELECT * FROM Individual
INNER JOIN Publisher
ON Individual.IndividualId = Publisher.IndividualId
WHERE Individual.IndividualId = (SELECT someID FROM table WHERE blahblahblah)
Pokud si přejete vybrat na základě více hodnot:
SELECT * FROM Individual
INNER JOIN Publisher
ON Individual.IndividualId = Publisher.IndividualId
WHERE Individual.IndividualId IN (SELECT someID FROM table WHERE blahblahblah)
Můžete to jen přepsat jako další JOIN
. To je obvykle nejjednodušší a nejrychlejší:
SELECT i.*, p.*
FROM individual i
JOIN publisher p USING (individualid)
JOIN another_table a ON a.identifier = i.individualid
WHERE a.something = 'something'
Trochu jsem také zjednodušil a zbavil se bezdůvodného hláskování identifikátorů CamelCase.