mysql - SQL查询中子查询的语法和逻辑

标签 mysql subquery

我正在执行下面给出的 SQL 查询。

 SELECT         
        a.`Cust_id`,    
        b.First_Name,
        b.Last_Name,
        b.Email
 FROM
        Customers AS a,
        (SELECT Cust_Fname,Cust_LName,Email
         FROM Cust_Info 
        )AS b
 WHERE
        a.`Product`='Pepsodent' #table b doesn't have Product column
 GROUP BY Cust_id     #Both tables 'a' and 'b' have Cust_id
 ;

我知道我可以在此处使用 JOINS 而不是子查询,但我正在从另一个角度查看此代码。

据我的理解,代码正在从两个表中检索信息 - a 和 b 即它从表 a 和 中获取 'Cust_id'表 b 中的名字、姓氏、电子邮件。它还在 WHERE 子句上过滤结果集,该子句在条件中仅使用表 a。然而,正如评论所说,表“a”和“b”都有 Cust_id。

所以我的问题是 - 表 b 如何知道要选择哪个 cust_id(因为条件仅在表 a 上,即 a.Product='Pepsodent')? 什么是这里涉及到什么逻辑?

附注我正在 SQLYog 上编写此查询

最佳答案

这里发生的是 SQL 为您连接表,但由于您没有指定条件,因此您将获得这些表的所有组合(笛卡尔积,在 sql 中称为 CROSS JOIN ),例如,如果表 a有 3 行和 Cust_Info有 2 行,您将得到 6 行,当然,因为这些行的部分数据来自 a您可以过滤产品。

另请注意,即使两个表都有 Cust_id您的子查询没有选择它,这意味着 b没有这样调用的列,如果不是这种情况,SQL 也无法知道您引用的是哪一列,此时您必须指定 a.Cust_idb.Cust_id .

关于mysql - SQL查询中子查询的语法和逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25152894/

相关文章:

php - 输入值不会在浏览器中显示,而是显示空白字段

javascript - 在 NodeJS 中使用 BETWEEN 子句

sql - 如何将不同表中的其他列值获取到查询中?

php - Mysql/PHP 无限子查询

mysql - INNER JOIN 中的子查询 (MySQL)

sql - mysql查询三个表,想用JOIN代替子查询

mysql - 解决MySQL间隙锁

MySQL如何减去两个DATETIME和INT值

mysql - 如何修复 VB.Net 上 DataGridView 的双输出