有没有一种方法可以将SUBQUERY用于级联的where语句?

时间:2019-11-05 17:29:38

标签: sql

我正在尝试附加一些虚拟数据以用作参考。

我正试图从数十万个池中提取一组特定的帐号。该池由潜在客户和后续客户组成。潜在客户帐户以5位数字开头,以三个零结尾。以下帐户使用相同的5个数字,并更改最后三个。每个潜在客户帐户通常都有25-75个关注帐户。

我的目标是从某个潜在客户组中撤出所有关注账户。 我面临的问题是,关注帐户不包含我希望过滤掉的隐含条件。潜在客户有一个颜色代码,并且所有后续帐户都知道使用该颜色代码。不幸的是,这仅在线索上给出。

这是我到目前为止所拥有的:

Select
    Account Number,
    Color Code
From
    Master.Table
Where
    LEFT(Account Number, 5) =
    (Select LEFT(Account Number, 5)
     From Master.Table
     Where Color Code IN ('Green', 'Magenta', 'Teal', 'Gray', 'Purple', 'Yellow', 'Beige'))

2 个答案:

答案 0 :(得分:1)

您的代码基本上看起来正确。我会做一些小的修改:

Select t.AccountNumber, t.ColorCode
From Master.Table t
Where left(t.AccountNumber, 5) in (
           Select left(t2.AccountNumber, 5)
           From Master.Table t2
           Where t2.ColorCode in ('Green', 'Magenta', 'Teal', 'Gray', 'Purple', 'Yellow', 'Beige') and
                 t2.AccountNumber like '%000'
          );

注意:

  • 这将修复列名,使其没有空格。
  • 这使用IN而不是=
  • 这确保在子查询中仅考虑主帐户。

答案 1 :(得分:0)

您还可以使用联接在没有子查询的情况下执行某些操作

CREATE TABLE #tempTable (
    accountNumber NVARCHAR(20),
    colorCode NVARCHAR(20)
    )

INSERT INTO #tempTable (
    accountNumber,
    colorCode
    )
VALUES ('12345000','Magenta'),('12346000','Beige'),('12347000','Black'),
    ('12345123',''),('12346321',''),('12346387',''),('12347988','')

SELECT b.accountNumber, a.colorCode
FROM #tempTable a
LEFT JOIN #tempTable b
    ON LEFT(a.accountNumber, 5) = LEFT(b.accountNumber, 5)
        AND a.colorCode IN (
            'Green',
            'Magenta',
            'Teal',
            'Gray',
            'Purple',
            'Yellow',
            'Beige'
            )
WHERE RIGHT(b.accountNumber, 3) <> '000'

DROP TABLE #tempTable

这将返回

accountNumber   colorCode
12345123        Magenta
12346321        Beige
12346387        Beige