2010-06-09 2 views
1

я имею запрос,Как вернуть значение null, если запрос не имеет соответствующего значения?

select c.name as companyname, u.name,u.email,u.role,a.date 
from useraccount u, company c, audittrial a 
where 
    u.status='active' 
    and u.companyid=c.id 
    and 
    (
     u.companyid=a.companyID 
     and a.activity like 'User activated%' 
     and a.email=u.email 
    ) 
order by u.companyid desc 
limit 10 

Так что, если следующая часть doesnt't удовлетворяют условиям,

(
    u.companyid=a.companyID 
    and a.activity like 'User activated%' 
    and a.email=u.email 
) 

не будет возвращено ни одной строки ..

, но я хочу, чтобы вернуть результат следующий вопрос:

select c.name as companyname, u.name,u.email,u.role,a.date 
from useraccount u, company c, audittrial a 
where 
    u.status='active' 
    and u.companyid=c.id 
order by u.companyid desc 
limit 10 

но, чтобы добавить это, я должен вернуть дату, если vailable и вернуть значение null, если дата недоступна.

как я могу это сделать?

+2

первые вещи сначала - используйте конкретный JOIN вместо используемой техники –

+0

Я не уверен, что я точно следую. Является ли идея, что вы определенно хотите данные из своих учетных записей и рядов компаний, и **, если они доступны **, вы также хотите получить данные аудита? – VoteyDisciple

ответ

5

несколько таблиц в сочетании с пунктом where эффективно внутреннее соединение:

select * from table1, table2 where table1.id = table2.id 

такая же, как

select * from table1 inner join table2 on table1.id = table2.id 

Для того, чтобы журнал аудита необязательно, изменить его на left join:

select ... 
from useraccount u 
join company c 
on  u.companyid = c.id 
left join 
     audittrial a 
on  a.activity like 'User activated%' 
     and a.email = u.email 
order by 
     u.companyid desc 
limit 10 

Кстати, я считаю, что правильное написание - аудит tr ai l.

0
SELECT c.name as companyname, u.name,u.email,u.role, 
     IF(a.date!='', a.date, null) AS audit_date 

FROM "rest of query" 
Смежные вопросы