2017-01-17 2 views
0

Может ли кто-нибудь помочь с вложенным запросом, который я использую в форме VB, поскольку я борется.SQL Вложенный запрос, поиск по нескольким полям

Итак, первая часть запроса заключается в следующем.

select 
    [incidentid] as incidentid, 
    ('Incident' &' '&[incidentID] &' '&'has a new containment') as incisearch 
from 
    containment 
where 
    transtime > @logout 

Это прекрасно работает и вернет правильную информацию. Я бы хотел выполнить поиск по другому параметру, который равен @username.

Эта информация содержится в таблице под названием incident и @username В параметре можно найти либо в incidentowner, purchasingmember или additionalmember полей.

В основном я хочу запрос возвращать результаты, если защитная оболочка была введена после того, как пользователь, который может быть найден в incidentowner, purchasingmember или additionalmember имеет последний вход в системе.

Так вот что я пытался до сих пор:

select 
    [incidentid] as incidentid, 
    ('Incident' &' '&[incidentID] &' '&'has a new containment') as incisearch 
from 
    containment 
where 
    transtime > @logout and 
    purchasingmember in 
     (select 
      [incidentid] 
     from 
      incident 
     where 
      purchasingmember = @username) 

Я сначала подумал, я хотел бы попробовать это просто поиск одного поля, а не несколько, это возвращает ошибку

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

Затем я также попытался найти несколько полей одновременно, используя следующую

select 
    [incidentid] as incidentid, 
    ('Incident' &' '&[incidentID] &' '&'has a new containment') as incisearch 
from 
    containment 
where 
    transtime > @logout and 
    @username in 
     (select 
      [incidentid] 
     from 
      incident 
     where 
      (incidentowner = @username) or 
      (purchasingmember = @username) or 
      (additionalmember = @username)) 

Этот запрос не обязательно, но он не дал никаких результатов, и я ожидаю, чтобы вернуться ровно один. Так что этот запрос не нарушен. Я просто не думаю, что я сказал ему, что искать правильно. Может ли кто-нибудь помочь?

От получения комментариев ниже я также внесены изменения, чтобы попробовать следующий код, но он все еще не работает, как предполагалось

select 
    [incidentid] as incidentid, 
    ('Incident' &' '&[incidentID] &' '&'has a new containment') as incisearch 
from 
    containment 
where 
    transtime > @logout and 
    incidentid in 
     (select 
      [incidentid] 
     from 
      incident 
     where 
      (incidentowner = @username) or 
      (purchasingmember = @username) or 
      (additionalmember = @username)) 
+0

вы не должны делать что-то вроде '... @INCIDENTID в (выберите [indientid] от инцидента, когда ...'? вы Searchin имя пользователя в списке incidentid! –

+1

вы уверены о вашем предложении ** @ username ** in (...)? вы проверяете параметр @username на IN Que ry –

+0

@LS_dev Я добавил новый запрос, надеясь исправить эту ошибку, но он все еще не возвращает результат, как я ожидаю, можете ли вы сказать мне, где я ошибаюсь? ни в коем случае не выполняется запрос, проверяющий, что инцидент в сдерживании совпадает с инцидентом в инциденте. – Boneyt

ответ

0

Благодаря @ Jinx88909 мне удалось решить эту проблему, правильная команда SQL должна была

select 
    containment.incidentid as incidentid, 
    ('Incident' &' '& containment.incidentID &' '&'has a new containment') as incisearch 
from 
    (containment INNER JOIN incident ON containment.incidentid = incident.incidentid) 
where 
    containment.transtime > @logout and 
    (incident.incidentowner = @username or incident.purchasingmember = @username or incident.additionalmember = @username) 
Смежные вопросы