开发者社区> 问答> 正文

SQL Server存储过程:如何在另一个表中查找至少包含相同数据的条目作为输入

0

我不知道该如何命名,对不起,如果标题没有意义。我对此练习感到很困惑,这是数据库架构的一部分:

条形图(BarID,名称) 饮料(DrinkID,名称,TypeID) 出售(BarID,DrinkID,价格) 我的问题是我需要编写一个过程,该过程选择所有包含至少与该过程中使用变量(例如@barname)输入的酒吧相同饮料的酒吧。

例如,如果酒吧A销售威士忌和可乐,则需要选择所有至少出售威士忌和可乐的酒吧。

这是我使用游标进行的非常复杂的尝试,但是我不知道是否必须使用带有tbh的游标。我真的迷路了。

ALTER PROCEDURE similar 
    (@barname AS VARCHAR(30))
AS 
BEGIN
    SET NOCOUNT ON

    DECLARE @db AS INT

    SELECT @db = COUNT(*)
    FROM Sells
    WHERE BarID = (SELECT BarID FROM Bars WHERE Bars.Name = @barname)

    SELECT BarID INTO #BarMinDb
    FROM Sells
    WHERE BarID != (SELECT BarID FROM Bars WHERE Bars.Name = @barname)
    GROUP BY BarID
    HAVING COUNT(DrinkID) >= @db

    DECLARE @rn AS INT

    DECLARE kurzor CURSOR FOR 
         SELECT BarID FROM #barMinDb

    OPEN kurzor

    FETCH NEXT FROM kurzor INTO @rn

    WHILE @@FETCH_STATUS = 0
        IF (SELECT DrinkID
            FROM Sells
            WHERE BarID = @rn) IN (SELECT DrinkID 
                                   FROM Sells
                                   WHERE BarID = (SELECT Name FROM Bars 
                                                  WHERE Bars.Name = @barname)
            )
        BEGIN
            PRINT @rn
        END

        FETCH NEXT FROM kurzor INTO @rn

    CLOSE kurzor
    DEALLOCATE kurzor
END

也有人要求我选择它们,所以我想我需要使用SELECT而不是手动打印它们。

展开
收起
祖安文状元 2020-01-06 12:03:03 539 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载
AnalyticDB基础版:云原生My SQL 敏捷数仓 立即下载