SQL 存在于带有 where 子句的子查询中

SQL exists in subquery with where clause

提问人:OrianFishken 提问时间:6/7/2023 最后编辑:OrianFishken 更新时间:6/8/2023 访问量:104

问:

我真的不明白为什么我们在这里收到来自 SF 的员工名单,并且存在于办公室表格中。

  1. Exists 遍历子查询,结果为 0 或 1 - 子查询中有一行条件为 where or not。
  2. 如果结果为 0 或 1,则主查询中的 WHERE 仅接收 1 或 0,WHERE 1 - 表示检索所有行。
  3. 查询工作正常,但我不明白为什么
SELECT 
    employeenumber, 
    firstname, 
    lastname, 
    extension
FROM
    employees
WHERE

    EXISTS( 
        SELECT 
            1
        FROM
            offices
        WHERE
            city = 'San Francisco' AND 
           offices.officeCode = employees.officeCode)

;
sql mysql 子查询 where-clause boolean-logic

评论

0赞 P.Salmon 6/7/2023
已发布的代码不进行语法处理。具体来说,就是导致错误。还有什么是 WHERE 1 ?3 应该是什么意思?subquery
0赞 P.Salmon 6/7/2023
请查看 dev.mysql.com/doc/refman/8.0/en/...
0赞 OrianFishken 6/8/2023
感谢您的链接,但我不明白为什么它有效......如果存在结果为 1,那么最后我们将收到主要查询,例如 SELECT employeenumber、firstname、lastname、extension FROM employees WHERE 1
0赞 Community 6/8/2023
请编辑问题,将其限制为具有足够详细信息的特定问题,以确定适当的答案。

答:

1赞 JNevill 6/8/2023 #1

此子查询是一个相关的子查询,因为每一行都通过 .officeCode

它说“对于这个记录,找到它,如果你发现那个办公室在,然后返回一些东西”,在这种情况下,它是一个,但它可能是字符串“butthead”,它会很好用。如果返回了某些内容,则该记录将进入查询的结果集。如果未返回任何内容,则该记录不会进入结果集。officeCodeemployeeofficeCodeofficescity"San Francisco"1

它将返回与以下内容相同的结果:

SELECT 
    employee.employeenumber, 
    employee.firstname, 
    employee.lastname, 
    employee.extension
FROM employee
    INNER JOIN offices
        ON employee.officeCode = offices.officeCode
WHERE offices.city = 'San Francisco';

区别在于,在此查询中,来自的列是子句中返回的候选列。officesSELECT