mysql 当Exists像连接一样使用时,它究竟是如何工作的?

e3bfsja2  于 2023-01-08  发布在  Mysql
关注(0)|答案(1)|浏览(161)

我觉得自己很笨拙,因为我一直在寻找关于存在到底是如何工作的信息,我继续没有弄清楚它。
假设我有以下查询:

SELECT *
  FROM suppliers
 WHERE EXISTS (select *
                 from orders
                where suppliers.supplier_id = orders.supplier_id);

我从exists中知道的是,如果它的参数query为真,那么外部查询就会被执行,所以假设内部查询为真,那么输出结果就是外部查询的所有表:

SELECT *
      FROM suppliers

但实际上它不是,我想我错过了一些东西,当exists被用来做内部连接时,就像这个例子一样,但我不明白...
我已经采取了这篇文章的例子,我已经阅读了所有的答案,我不明白它真的很好..:How do SQL EXISTS statements work?
我真的很感谢所有可能的帮助。先谢了

0x6upsns

0x6upsns1#

它实际上实现了以下伪代码循环:

for row in suppliers
    current_supplier_id = row.supplier_id
    perform subquery: 
        SELECT * 
        FROM orders 
        WHERE orders.supplier_id = current_supplier_id
    if the subquery returns any results, add row to the result set

现在您应该能够看到内部查询每次是如何变化的,它只是查找一个特定的supplier_id,而不是其中的任何一个。

相关问题