我对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拒绝了多次...(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
一个id_item
有多个id_passage
。有多个
id_item_detail
一个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)
评论
可以那样直接吗?如果从表SELECT someID FROM blahblahblah有多个记录,它仍然可以工作吗?我现在要检查一下。
–斯蒂芬·罗兰(Stephane Rolland)
13年1月25日在16:38
哪个查询正在选择多个记录?如果您选择多个记录,则可以使用此方法,但是如果您可以向我们展示您的表格布局,这将有助于我们优化答案。
–愤怒的斯巴达人
13年1月25日在16:40
在哪里Individual.IndividualId ...看起来不错。
–斯蒂芬·罗兰(Stephane Rolland)
2013年1月25日17:00
@StephaneRolland:非常明显,谢谢!
– Paul
19/12/20在21:03
#2 楼
您可以将其重写为另一个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标识符拼写。
评论
是的,这个。每当我看到IN(SELECT ..)语法时,我都会在里面死一些。
– Mark Storey-Smith
13年1月26日在12:56
@ MarkStorey-Smith您的意思是它比简单和快速还多:这是使用另一个联接而不是in(select ...)的sql编码标准。在这种情况下,我还应该将良好的答案归功于Erwin。
–斯蒂芬·罗兰(Stephane Rolland)
2013年1月26日19:27
@StephaneRolland是否更快取决于平台和版本。例如,SQL Server 2008+将为INNER JOIN和IN(SELECT ...)语法生成相同的执行计划。不知道是否同样适用于PostgreSql。除了性能,IN(SELECT ...)风格让我想知道作者是否已经完全掌握了SQL的语义和概念。 AngrySpartan已正确回答了您的原始问题。 ErwinBrandstetter已向您显示了应采取的方式:)。
– Mark Storey-Smith
2013年1月26日19:41
@ MarkStorey-Smith:JOIN并不总是等同于IN条件。问题不是哪个更快,问题是哪个正确。
– a_horse_with_no_name
2015年12月11日在11:48
我只掌握了部分SQL语义/概念。如果整个查询的IN(SELECT ...)部分中的SELECT语句返回多行,那么如何用JOIN替换“ IN(SELECT ...)”语法?
–Clovis_Sangrail
20年6月1日,0:50
评论
postgresql.org/docs/9.1/static / ...您是指7.2.1.3。子查询?
可能是的,还有JOIN部分。