2015-06-25 6 views
0

Я пытаюсь построить запрос к структуре базы данных ниже.Улучшите запрос для заполнения Treeview

enter image description here

В основном, когда зарегистрированный пользователь в таблице tbuser входит в систему генерирует кортеж в таблице tbuser_logger (который принимает его идентификатор). Затем после этого пользователь может создать проект в таблице tbprojeto. После того, как он создаст кортеж в таблице tbdataid, в котором содержится идентификатор созданного проекта и идентификатор кортежа, созданного ранее в таблице tbuser_logger, или пользовательская информация, которая была зарегистрирована в то время, и какой проект он использовал.

Все остальные системные таблицы как tbcliente, tbinstituições, tbcar, tbhome и т. Д. Имеют внешний ключ в таблице tbdataid, поэтому каждая записанная информация будет содержать информацию о том, какой проект и какой пользователь.

Я пытаюсь подключить SQL, чтобы принести все данные, которые определенный пользователь записал в проекте и из проекта. Таким образом (с помощью всего двух таблиц):

SELECT 
    t1.datProj_Id, 
    t2.projNome, 
    t3.instNome, 
    t4.cltNome 
FROM 
    tbdataid t1 
    LEFT JOIN tbprojeto t2 ON (t1.datId = t2.projDat_Id) 
    LEFT JOIN tbinstituicao t3 ON (t1.datId = t3.instDat_Id) 
    LEFT JOIN tbcliente t4 ON (t1.datId = t4.cltDat_Id) 
    LEFT JOIN tbuser_logger t5 ON (t1.datUsrLog_Id = t5.usrLogId) 
    LEFT JOIN tbuser t6 ON (t5.usr_Id = t6.usrId) 
WHERE 
    (t1.datProj_Id = 12 AND t6.usrId = 8) 
    OR (t1.datProj_Id IS NULL AND t6.usrId = 8) 

Мой запрос приносит данные, которые я хочу, и поэтому после заполнения TreeView. Но в запросе много кортежей null, что нормально. Итак, как можно улучшить или улучшить этот запрос, чтобы упростить построение древовидной структуры? Выполните следующие результаты:

enter image description here

Если у меня есть только один значения datid, как изображение ниже «1», у меня будет много дубликатов кортежей с небольшим размером базы данных, принеси мне о 96K. Я мог бы сравнить, прежде чем не ставить двойные результаты treeview, однако это большой запрос к набору данных в deplhi.

enter image description here

+0

Какая проблема вы пытаетесь решить? Вы говорите, что получаете нормальные результаты, поэтому какое улучшение в запросе вы имеете в виду? С какими трудностями вы сталкиваетесь при создании древовидного представления? –

+0

@RobKennedy Я хотел удалить нулевые кортежи в запросе, чтобы уменьшить размер набора данных. Таким образом, у меня всегда будет одно значение, отличное от нуля, в столбце projNome, например, количество instNome и cltNome, а не нулевые значения. –

+0

Что этот вопрос имеет отношение к Delphi? Это 100% от SQL. –

ответ

0

Я вижу, что вы используете IS NULL в вашем запросе, почему бы не вставить некоторые IS NOT NULL? По крайней мере, чтобы удалить все целиком NULL.

+0

Я возьму, я посмотрю, могу ли я использовать какой-то «НЕ НУЛЛ» –

Смежные вопросы