2014-12-28 2 views
0

Я провел много часов, объединив свой запрос в один. У меня 3 таблицы базы данных. Это пример схемы. enter image description hereОбъединение запросов 2 sql в один

У меня есть только имя пользователя с сеанса. Мне нужно взять все билеты из базы данных из пользовательской компании.
Пример:
Пользователь A, работающий в компании B.
Компания B имеет много рабочих. Рабочие создают билеты.
Пользователь A после входа в систему просмотрите все билеты от своей компании.
Теперь я сделал это, используя 2 запроса:
- Take usera Идентификатор компании
- Возьмите билеты, где пользователи работают в компании-спецификаторе.

+3

(1) Просьба предоставить образцы данных и желаемые результаты. (2) Также отредактируйте свой вопрос и включите запросы, которые вы пытаетесь объединить. –

ответ

4

Это следует сделать это:

SELECT * 
FROM User u1 
INNER JOIN User u2 on u2.id_company = u1.id_company 
INNER JOIN Ticket t on t.id_author = u2.id_user 
WHERE u1.Name = @SessionUser 
+0

Работает на помощь. – seti

1

Вы хотите что-то ищите?

select t.* 
from users u join 
    tickets t 
    on u.id_user = t.id_author 
where u.company_id = (select u2.company_id from users u2 where u2.id_user = 'UserA'); 
+0

Чем быстрее ваш результат или @JoelCoehoorn? – seti

+1

@seti. , , Вы должны проверить его и попробовать. С индексом на 'users (id_user)', я ожидал бы, что производительность будет одинаковой. Однако эта версия возвращает информацию о билете (которая, как вам кажется, нужна), и не имеет повторяющихся имен столбцов, что может сбить с толку. –

1

присоединяется, как правило, быстрее, чем подзапросы, однако многие СУБД»оптимизировать подзапросов в объединения, так что разница между запросами, вероятно, не имеет значения. Ниже приведена переработанная версия запроса Gordon Linoff, удаляющего подзапрос.

select t.* from Users u1 
    join User u2 on u2.id_company = u1.id_company 
    join Ticket t on t.id_author = u1.id_user 
    where u1.id.user = 'User1'; 

Однако, если ваша база данных оптимизирует SQL, разница незначительна.

+1

Я изменил присоединение к пункту where. HQL не поддерживает соединение. – seti

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