微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试将这些查询合并为一个,因为我想在不使用临时表的情况下编写查询不断收到语法错误

如何解决尝试将这些查询合并为一个,因为我想在不使用临时表的情况下编写查询不断收到语法错误

    SELECT
          CAST([patientDATA] AS XML).value('PatientcardCard[1]/Replacements[1]/patientId[1]','nvarchar(80)') [patientId],* into #tmp
        FROM hospital [c1] with(NOLOCK)
        where
        patientserial in (
        select ptserial From patients with(Nolock)
        where patientsid=6889
        and patientprogramid in (
        26917,21296,27025
        )
        )
    
    

    select patientId,patientbarcode,patientprogramID
    into #tmp1
    From #tmp
    join patients with(nolock) on patientserial=ptserial
    where patientid in
    ('0401478300007847','0401478300008566','0401478300008761','0401478300008727','0401478300007648','0401478300008020'
)

所以第一个查询是使用强制转换从列内的标签获取值,标签是患者 ID,并将数据存储到临时表中。

第二个查询是从临时表中提取数据。我想在不使用临时表的情况下编写嵌套查询。但我一直有语法错误,这是我目前的查询

select patientId,patientprogramID
        
        From (
 SELECT
          CAST([patientDATA] AS XML).value('PatientcardCard[1]/Replacements[1]/patientId[1]',27025
        )
        )



)
        join patients with(nolock) on patientserial=ptserial
        where patientid in
        ('0401478300007847','0401478300008020'
    )

我在 sql 中的错误

invalid column in first line,around patientId,patientbarcode


and in join part,invalid column as ptserial

是不是因为值被强制转换了?

解决方法

您的方法存在一些问题。

  1. SELECT * 不是一个好主意。它也似乎是不必要的 用于您的最终查询。
  2. 你应该每列参考哪个表 来自。
  3. 你可能想多了。
SELECT CAST([patientDATA] AS XML).value('PatientcardCard[1]/Replacements[1]/patientId[1]','nvarchar(80)') [patientId],patientbarcode,patiendprogramID

FROM hospital h
    INNER JOIN patients p ON p.ptserial = h.patientserial

WHERE patientsid = 6889
  AND patientprogramid IN (26917,21296,27025)
  AND patientid IN (
        '0401478300007847','0401478300008566','0401478300008761','0401478300008727','0401478300007648','0401478300008020'
        )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。