gpt4 book ai didi

sql - 在 EXISTS 子查询中什么更容易阅读?

转载 作者:行者123 更新时间:2023-12-04 01:57:38 25 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




9年前关闭。




这是的问题可读性 .性能没有区别。
旧版本的 SQL Server 很愚蠢,可以查找元数据,但现在不行了。

SELECT foo FROM bar WHERE EXISTS (SELECT * FROM baz WHERE baz.id = bar.id);
SELECT foo FROM bar WHERE EXISTS (SELECT 1 FROM baz WHERE baz.id = bar.id);

我不考虑 NULL 或“有趣的变体”,这对我来说似乎不直观。
SELECT foo FROM bar WHERE EXISTS (SELECT NULL FROM baz WHERE baz.id = bar.id);
SELECT foo FROM bar WHERE EXISTS (SELECT 1/0 FROM baz WHERE baz.id = bar.id);

刚才在评论中出现了这个问题。我研究了最流行的 RDBMS 的手册:
  • MS SQL 似乎更喜欢 SELECT * in the manual .
  • example in the PostgreSQL 9.4 manual用途 SELECT 1 .
  • Oracle 11g 有 SELECT *language reference .
  • MySQL 5.7 有 SELECT *reference manual还有SELECT 1在评论中。
  • SQLite 在 language reference 中没有示例.

  • 在 SO 上搜索 code:"EXISTS (SELECT 1"产生 5,048 个结果。
    在 SO 上搜索 code:"EXISTS (SELECT *"产生 5,154 个结果。
    更新链接和计数 07.2015。

    所以 SELECT *拥有大众投票和大型商业 RDBMS。
    我找到 SELECT 1更直观。这就像在说“如果至少存在一个”。
    SELECT *更直观?

    最佳答案

    直观是...EXISTS (SELECT * ..因为你真的不在乎

  • 唯一重要的关键字是 存在
  • ...EXISTS (SELECT 1 ..的选择延续围绕 EXISTS 的普遍神话和迷信(例如对 MySQL 文档的评论)。
  • ANSI 标准说“没关系”
  • 理解 EXISTS 是半连接会更有趣。
  • 关于sql - 在 EXISTS 子查询中什么更容易阅读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7710153/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com