SQL 存储过程 连接表
Posted
技术标签:
【中文标题】SQL 存储过程 连接表【英文标题】:SQL Stored procedure Joining tables 【发布时间】:2014-06-19 19:25:17 【问题描述】:背景:我的问题有点具体。我正在按照规范创建应用程序,其中一项任务涉及创建存储过程。我知道如何创建和存储一个过程以及如何实现一个过程,但我只是在构造一个过程时遇到了一些问题。
规范规定:
写一个存储过程 upGetTestID。它将接受 3 个参数:WOID、SampleID、Analyte 您需要将 tblWOSampleTest 加入到 TestID 上的 tblTest 然后 SELECT TestID WHERE 三个值匹配
我无法理解我应该做什么。这些表需要连接,因为一个表有列 WOID、SampleID、TestID 但没有 Analyte,而另一个表只有 Analyte 和 TestID。但后来我不知道如何在三个值匹配的地方选择 TestID 以下是一些复制说明的尝试:
CREATE PROCEDURE upGetTestID @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60)
AS
SELECT TestID
FROM tblWOSampleTest
JOIN tblTest
ON tblTest.TestID=tblWOSampleTest.TestID;
WHERE @WOID = tblTest.WOID AND @SampleID = tblTest.SampleID AND @Analyte = tblTest.Analyte
GO
这没用
CREATE PROCEDURE upGetTestID @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60)
AS
SELECT *
FROM tblWOSampleTest
JOIN tblTest
ON tblTest.TestID=tblWOSampleTest.TestID;
SELECT TestID
WHERE @WOID = tblWOSampleTest.WOID AND @SampleID = tblWOSampleTest.SampleID AND @Analyte = tblTest.Analyte
GO
这也不起作用。我真正想知道的是指示要我做什么,因为我对此有点困惑。
【问题讨论】:
【参考方案1】:您应该在哪里反对具有所需列的表。否则你的第一篇文章是正确的方式。
CREATE PROCEDURE upGetTestID @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60)
AS
SELECT TestID
FROM tblWOSampleTest
JOIN tblTest
ON tblTest.TestID=tblWOSampleTest.TestID;
WHERE @WOID = tblWOSampleTest.WOID AND @SampleID = tblWOSampleTest.SampleID AND @Analyte = tblTest.Analyte
GO
【讨论】:
感谢您的建议,但它说 WHERE 附近有错误 不确定您的哪些表有哪些字段,但您的联接很好。然后您的 WHERE 应该询问具有您想要的字段的表中的值。如果您需要更多帮助,我需要查看 2 个表的架构。我现在只能从你的帖子中猜测。【参考方案2】:CREATE PROCEDURE upGetTestIDForAnalyte @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60)
AS
SELECT TestID = t1.TestID
FROM tblWOSampleTest t1
JOIN tblTest t2
ON t1.TestID=t2.TestID;
WHERE @WOID = t1.WOID AND @SampleID = t1.SampleID AND @Analyte = t2.Analyte
GO
我的问题原来是一个模棱两可的列名。我用这个网站作为参考http://databases.aspfaq.com/database/what-does-ambiguous-column-name-mean.html。我需要指定哪个表用于列 TestID
【讨论】:
以上是关于SQL 存储过程 连接表的主要内容,如果未能解决你的问题,请参考以下文章