Sql server sqlserver:自连接查询;仅选择名匹配且没有where语句的记录
我对SQL Server完全陌生。我被困在实验室的问题上了。我不能使用WHERE语句来限制结果。我附上了下面给我的说明。预期结果应返回6行。我当前返回122行。我们正在使用Microsoft SQL Server Management Studio。我们正在从一个包含数千条记录的大型预配置数据库中提取数据 这是引自实验室的文本 编写返回三列的SELECT语句:Sql server sqlserver:自连接查询;仅选择名匹配且没有where语句的记录,sql-server,select,self-join,Sql Server,Select,Self Join,我对SQL Server完全陌生。我被困在实验室的问题上了。我不能使用WHERE语句来限制结果。我附上了下面给我的说明。预期结果应返回6行。我当前返回122行。我们正在使用Microsoft SQL Server Management Studio。我们正在从一个包含数千条记录的大型预配置数据库中提取数据 这是引自实验室的文本 编写返回三列的SELECT语句: 供应商表中的VendorID 供应商表中的VendorName VendorContactFName和VendorContactLNa
- 供应商表中的VendorID
- 供应商表中的VendorName
- VendorContactFName和VendorContactLName的联系人姓名别名,中间有空格李>
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];
您只需要更新连接条件,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]
选择DISTINCT V1.VendorID作为VendorID,
V1.VendorName作为VendorName,
CONCAT(V1.VendorContactFName',V1.VendorContactLName)
AS[联系人姓名]
从供应商作为V1加入供应商作为V2
打开(V1.VendorContactFName=V2.VendorContactFName)和
(V1.VendorID V2.VendorID)
订购人[联系人姓名]
欢迎来到堆栈溢出,克里斯。你的问题没有包含足够的细节,我们无法帮助你。查看并了解一个项目的重要性。然后,根据需要编辑您的问题。特别是一些样本数据和预期结果会很有帮助。逻辑还不清楚。“我必须只返回联系人姓名字段中具有匹配名字的记录。”因此ID1 | Bob | Smith
“匹配”ID2 | Bob | Somebodyelseski
?这似乎不是一个有用的数据集。我同意生成的数据集毫无意义,但这正是教授想要的……请阅读并付诸行动。同时点击谷歌的“stackexchange家庭作业”——解释你是如何得到你的查询的。PS分配结果描述不好。“比较”是模糊的,不适合描述结果而不是过程。“不同”是没有帮助的。(它可能是想说一些关于不同行的内容。)PS作业中说要返回哪些列?在你引用的块中没有任何地方说你的教授需要6条记录?您的教授要求所有与另一个供应商同名的供应商-为什么您也将姓氏作为联接条件?在您知道自己在做什么以及为什么之前,不要使用DISTINCT—它从来都不是复制由联接笛卡尔函数创建的记录的解决方案。始终使用显式内部、左外部、右外部和完全外部联接限定符。通常,表名不使用AS别名,但列名使用AS别名。更喜欢使用CONCAT来连接字符串,而不是+,因为它更符合逻辑地处理NULL