rap*_*2-h 4 sql postgresql postgresql-9.6
SELECT在WHERE EXIST子句的子查询中我有什么?
这是一个带有WHERE EXIST子句的随机查询:
SELECT a.*
FROM a
WHERE EXISTS
(SELECT *
FROM b
WHERE b.a_id = a.id)
Run Code Online (Sandbox Code Playgroud)
所以,*被选中了b.但这对我没有意义,因为我不想选择任何东西(除非我误解了它的行为WHERE EXIST).我可以选择,1但这似乎也很奇怪.
我认为它在执行速度方面并不重要,任何事情都可行,但它在可读性和"语义"方面可能很重要.(我不确定我用过的词!).这有什么最好的做法吗?如果是这样,为什么选择另一种方式?
没关系.一个好的做法是用来SELECT 1表明它是一个非数据返回子查询.我也听说传递1使用较少的字节到引擎,因为1有点而*不是.
选择未评估且无关紧要.在SQL Server中,您可以SELECT 1/0在存在的子查询中放置一个,它甚至不会抛出除以零的错误.
相关:EXISTS子查询中哪些更容易阅读? https://dba.stackexchange.com/questions/159413/exists-select-1-vs-exists-select-one-or-the-other
对于非信徒:
DECLARE @table1 TABLE (id INT)
DECLARE @table2 TABLE (id INT)
INSERT INTO @table1
VALUES
(1),
(2),
(3),
(4),
(5)
INSERT INTO @table2
VALUES
(1),
(2),
(3)
SELECT *
FROM @table1 t1
WHERE EXISTS (
SELECT 1/0
FROM @table2 t2
WHERE t1.id = t2.id)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |