我正在浏览下面给出的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 即从表中获取' Cust_id' 表b中的a和 First_Name,Last_Name,Email 。它还过滤WHERE子句上的结果集,该子句在条件中仅使用 Table a 。但是,正如评论所说,两个表格都是' a'和' b'有Cust_id。
所以我的问题是 - 表b如何知道选择哪个cust_id(因为条件在表格上只有iea Product
=' Pepsodent')?这里涉及的逻辑是什么?
P.S。我在SQLYog
上写这个查询答案 0 :(得分:0)
这里发生的是SQL为你加入表格,但由于你没有指定条件会发生什么,你将获得这些表的所有组合(笛卡尔积,在sql中称为CROSS JOIN
),例如,如果表a
有3行而Cust_Info
有2行,那么你将获得6行,当然因为行是来自a
的部分数据,你可以过滤产品
另请注意,即使两个表都有Cust_id
,您的子查询也没有选择它,这意味着b
没有这样的列,如果不是这样的话,那么SQL就不能知道您在哪个列中引用,此时您必须指定a.Cust_id
或b.Cust_id
。