Пытаюсь объединить эти запросы в один, потому что я хочу писать запросы без использования временной таблицы. Продолжайте получать синтаксическую ошибку

#sql #casting #temp-tables #nested-queries

Вопрос:

     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'
)
 

Итак, первый запрос использует приведение для получения значения из тега внутри столбца, тегом является PatientID, и он хранит данные во временной таблице.

Второй запрос — это извлечение данных из временной таблицы. Я хочу написать вложенный запрос без использования временной таблицы. Но я сохраняю синтаксическую ошибку, это мой запрос до сих пор:

 select patientId,patientbarcode,patientprogramID
        
        From (
 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
        )
        )



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

Моя ошибка в SQL:

 invalid column in first line, around patientId,patientbarcode


and in join part, invalid column as ptserial
 

Это потому, что значение приведено?

Ответ №1:

С вашим подходом есть некоторые проблемы.

  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'
        )
 

Комментарии:

1. Я все еще получаю недопустимую ошибку в идентификаторе пациента(последние строки), это потому, что я привел эти данные?

2. Я не знаю, что такое «недопустимая ошибка». Вы имеете в виду недопустимую ссылку на столбец или что-то в этом роде? Тебе не AND patientid IN следовало этого делать . Вы должны ссылаться на псевдоним таблицы, например AND p.patientid IN . Я этого не сделал, потому что не знаю, какая таблица содержит какие столбцы, потому что вы не предоставили эту информацию.