【问题标题】:TSQL inner select value in Outer Where Clause外部 Where 子句中的 TSQL 内部选择值
【发布时间】:2014-11-11 20:45:02
【问题描述】:

我有一个查询,我精简为我正在尝试做的一个非常基本的示例。

我的问题是我在我的工具上创建了一个动态的WHERE 子句,但甚至无法让下面的简单选择起作用。

我有一个名为BS_TrainingEvent_Segments 的表,其中包含培训事件。一个事件可以有多个片段。我的外部 Where 子句需要能够同时查询内部和外部选择,但在它所在的位置,它只是说 B cannot be bound

SELECT A.[teSegmentID],
       A.[trainingEventID],
       A.[segmentDate],
       A.[nonProdHrs],
      (
             SELECT B.[recordID],
                    B.[segmentID],
                    B.[localeID],
                    B.[teammateCount],
                    B.[leaderCount]
                 FROM dbo.BS_TrainingEvent_SegmentDetails AS B
                 WHERE A.teSegmentID = segmentID
                 FOR    XML PATH ('detail'), TYPE, ELEMENTS, ROOT ('details')
      ) AS B
FROM [red].[dbo].[BS_TrainingEvent_Segments] AS A
WHERE A.[teCategory] = 'Food' AND B.[localeID] = '462'
FOR    XML PATH ('data'), TYPE, ELEMENTS, ROOT ('root')

【问题讨论】:

  • 看起来应该没问题。你能创建一个 sqlfiddle 吗?
  • 看起来你不能在 WHERE 子句中有 B.[LocaleID] 因为没有这样的列 LocaleID 存在。您将其引用为 Derived 列,在这种情况下不是。 B 只是一列而不是表格。
  • 这就是我的问题。如何从外部 where 子句中的内部 select 查询数据?

标签: sql sql-server tsql stored-procedures


【解决方案1】:
SELECT A.[teSegmentID],
    A.[trainingEventID],
    A.[segmentDate],
    A.[nonProdHrs],
    (
        SELECT B.[recordID],
            B.[segmentID],
            B.[localeID],
            B.[teammateCount],
            B.[leaderCount]
        FROM dbo.BS_TrainingEvent_SegmentDetails AS B
        WHERE A.teSegmentID = B.segmentID AND B.[localeID] = '462'
        FOR XML PATH ('detail'), TYPE, ELEMENTS, ROOT ('details')
    )
FROM [red].[dbo].[BS_TrainingEvent_Segments] AS A
WHERE A.[teCategory] = 'Food'
FOR XML PATH ('data'), TYPE, ELEMENTS, ROOT ('root');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多