sql-server - SQL Server:自联接查询;仅选择与名字匹配的记录,而没有 where 语句
问题描述
我对 SQL Server 完全陌生。我被困在一个实验室问题上。我不能使用 WHERE 语句来限制结果。我附上了下面给我的指示。预期结果应返回 6 行。我目前返回 122 行。我们正在使用 Microsoft SQL Server Management Studio。我们正在从一个包含数千条记录的大型预配置数据库中提取数据。
这是实验室引用的文字。
编写返回三列的 SELECT 语句:
- VendorID 来自 Vendors 表
- VendorName 来自 Vendors 表
- VendorContactFName 和 VendorContactLName 的联系人姓名别名,中间有一个空格。
编写一个 SELECT 语句,比较其 VendorContactFName 与另一个 VendorContactFName 具有相同名字的每个供应商。换句话说,找到 VendorContactFName 具有相同名字的所有不同供应商。复合 JOIN 条件。
没有 WHERE 条件。按联系人姓名对最终结果集进行排序(返回 6 行)
提示:使用自连接和相关名称;例如:供应商表是 V1 和 V2。查询中的 QUALIFY ALL COLUMN NAMES,包括 SELECT 语句中的列名
到目前为止,这是我想出的,但无法弄清楚如何在没有 WHERE 语句的情况下限制记录。我可能有多余的代码,我在这里不需要,或者缺少我需要的代码。
这是我想出的开始的代码。
SELECT
V1.VendorID AS VendorID, V1.VendorName AS VendorName,
V1.VendorContactFName + ' ' + V1.VendorContactLName AS [Contact Name]
FROM
Vendors AS V1
JOIN
Vendors AS V2 ON (V1.VendorContactFName = V2.VendorContactFName)
AND (V1.VendorID = V2.VendorID)
ORDER BY
[Contact Name];
解决方案
您只需要更新 JOIN 条件,FirstName 应该在 V1 和 V2 之间匹配,但 vendorId 应该不同。也使用CONCAT
联系人姓名的功能
SELECT DISTINCT V1.VendorID AS VendorID,
V1.VendorName AS VendorName,
CONCAT(V1.VendorContactFName, ' ', V1.VendorContactLName)
AS [Contact Name]
FROM Vendors AS V1 JOIN Vendors AS V2
ON (V1.VendorContactFName = V2.VendorContactFName) AND
(V1.VendorID <> V2.VendorID)
ORDER BY [Contact Name]
推荐阅读
- javascript - 从 HTML 表单数据创建 JS 对象失败
- c# - WPF 全局热键未注册
- sql - 为我定义的函数创建触发器时,Postgres SQL 中的语法错误?
- java - 如何绕过或禁用 Ssl 握手错误
- android - 检查数据状态是否完全写入文件?
- c# - 无法让 InvokedItemContainer 与 Android 一起使用
- azure - 构建 docker 映像时无法在 Azure DevOps(工件)中授权
- firebase - 如何允许 Firebase RTB 架构中组织对象的“所有者”对属于该组的所有“用户”进行 .read 访问?
- c++ - boost::filesystem 获取当前目录中的所有文件 - Windows
- java - 如何正确从 HashMap 加载到 html 表?