尝试删除子查询并仅使用 WHERE 返回某些行时出现问题

Bri*_*uke 2 sql-server

我对 SQL 查询非常陌生。我正在为 Microsoft 70-461 学习并找到一个我认为可以简化的示例,但是我的版本返回了错误的结果,我想了解原因。

本学习指南显示了这个查询:

USE TSQL2012;
SELECT productid, productname, unitprice, P.supplierid
FROM Production.Products AS P
WHERE supplierid IN
    (SELECT supplier
     FROM Production.Suppliers
     WHERE country = N'Japan');
Run Code Online (Sandbox Code Playgroud)

正确返回 6 行,我的查询:

USE TSQL2012;
SELECT productid, productname, unitprice, P.supplierid
FROM Production.Products AS P, Production.Suppliers AS S
WHERE S.country = N'Japan':
Run Code Online (Sandbox Code Playgroud)

返回 231 行,production.products 表只包含 70 行开始,所以我不明白。有人可以告诉我我在俯瞰什么。先感谢您。

示例数据库“TSQL2012”可在此处下载。

Rob*_*ley 6

如果没有描述两个表之间匹配的谓词,您只需列出所有产品/日本供应商组合,而不管供应商是否适合每种产品。

USE TSQL2012
GO

SELECT  
    p.productid ,
    p.productname ,
    p.unitprice ,
    p.supplierid
FROM    Production.Products p
JOIN  Production.Suppliers s ON p.supplierid = s.supplierid
WHERE   s.country = N'Japan';
Run Code Online (Sandbox Code Playgroud)