Ste*_*and 31 postgresql join select
我在 libpq 之上为PostrgreSQL制作了一个远程应用程序草案。它表现良好,但我已经描述了应用程序的一般功能。对于我产生的每个最终业务结果,我碰巧调用了类似 40 select 子句(通过 tcpip)的东西。
我有 SQL-Server 的回忆,提醒我尽量减少远程应用程序和数据库之间的交互次数。分析了我的选择后,我确实认为我可以SELECT使用连接将这个数字减少到 3 个子句。但我不记得SELECT在 another 中使用 a 的结果的语法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'
Run Code Online (Sandbox Code Playgroud)
另一个SELECT就是这样的:
SELECT identifier FROM another_table WHERE something='something'
Run Code Online (Sandbox Code Playgroud)
这是简化的表布局,针对不同的 item_types 拒绝了多次......(3 种完全不同的类型,因此如果优化了 3 个 SQL 查询)。
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
Run Code Online (Sandbox Code Playgroud)
有几个id_item为一个id_passage。
有几个id_item_detail为一个id_item。
你会怎么写?
描述将一个选择重定向到另一个(如果有)的操作的名称是什么?
Ang*_*tan 41
这就是你的目标吗?确保被比较的字段是可比较的(即两个字段都是数字、文本、布尔值等)。
SELECT * FROM Individual
INNER JOIN Publisher
ON Individual.IndividualId = Publisher.IndividualId
WHERE Individual.IndividualId = (SELECT someID FROM table WHERE blahblahblah)
Run Code Online (Sandbox Code Playgroud)
如果您希望基于多个值进行选择:
SELECT * FROM Individual
INNER JOIN Publisher
ON Individual.IndividualId = Publisher.IndividualId
WHERE Individual.IndividualId IN (SELECT someID FROM table WHERE blahblahblah)
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 12
您可以将其重写为另一个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'
Run Code Online (Sandbox Code Playgroud)
我还进行了一些简化,并取消了标识符的无缘无故的 CamelCase 拼写。
| 归档时间: |
|
| 查看次数: |
379766 次 |
| 最近记录: |