【问题标题】:Find all lines where a value exists in one line查找一行中存在值的所有行
【发布时间】:2020-05-30 12:25:08
【问题描述】:

这是我的查询

        select order_no, pkg_no, zone_no
        from T_DETAIL_ITEM a 
        where order_no = 495
        order by order_no, pkg_no

对于给定的包,我有 zone number = 0

我需要做的是返回所有带有pkg_no = 1597 的行。因为存在一个零区。

我尝试了几个不同的“存在的地方”行,但它不起作用。

【问题讨论】:

    标签: sql-server select exists


    【解决方案1】:

    尝试自行加入。 这样,您可以将您的要求放在第二个表“实例”中,但根据另一个常见字段从该表匹配项中检索所有内容。

    select distinct a.order_no, a.pkg_no, a.zone_no
            from T_DETAIL_ITEM a 
            join T_DETAIL_ITEM b on b.pkg_no = a.pkg_no
            where b.zone_no = 0
            order by a.order_no, a.pkg_no
    

    【讨论】:

    • 我对一件事有点迷茫,当我拉表 a 的区域编号时,我得到的数字... 33、23、295 等。当我为表 b 做区域编号时它们都是零。为什么是这样。这在这里并不完全正确。
    • @YelizavetaYR 区域编号将始终为零,因为这就是我们在WHERE 子句(对于 b)中输入的内容。将获取所有其他区域编号,因为该行包含相同的 pkg 编号,用于一次出现的零区域编号。
    【解决方案2】:

    如果我正确理解了这个问题,你需要这样的东西 开始

    declare @str varchar(max);
    
    set @str='';
    
    SELECT  @str=@str+ [YOURCOLUMB]
    
      FROM [YOURTABLE]
    
    SELECT @str
    
    END
    

    【讨论】:

      【解决方案3】:

      一种方法是在左连接中自引用表,并且只在连接子句中包含那些 zone_no=0 的表。通过从左连接中排除不匹配的记录来过滤掉不匹配的记录,T2.pkg_no = NULL。

      SELECT
          T1.pkg_no, T1.zone_no
      FROM
          T_DETAIL_ITEM  T1
          LEFT OUTER JOIN T_DETAIL_ITEM T2 ON T2.pkg_no = T1.pkg_no AND T2.zone_no = 0
      WHERE
          NOT T2.pkg_no IS NULL   
      

      【讨论】:

        【解决方案4】:

        接受的答案很好,但我看到你注意到你尝试过 EXISTS,所以我用那个方法写了这个例子。

        SELECT *
        FROM T_Detail_Item  d
        WHERE exists (SELECT * FROM T_Detail_Item  dx WHERE dx.pkg_no = d.pkg_no AND dx.zone_no = 0)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-20
          • 1970-01-01
          • 2016-12-17
          • 1970-01-01
          • 1970-01-01
          • 2015-08-26
          • 2021-08-16
          • 1970-01-01
          相关资源
          最近更新 更多