2015-01-27 3 views
0

У меня возникли проблемы с выяснением того, как присоединиться к 2 таблицам. Я просто хочу, чтобы 1 столбец из другой таблицы был объединен, но добавление этого создает много дубликатов данных в таблице.joing 2 tables создает нежелательные повторяющиеся данные

Первая таблица: "Устройства":

id | device_type | open_ticket_count | device_owner 
1 | tablet  | 1     | bob 
2 | smartphone | 0     | 
3 | printer  | 1     | sally 

Второй стол: "билеты":

id | due_at 
1 | 25/12/2016 
2 | 
3 | 13/11/2016 

Я хочу присоединиться к ним, так как это:

id | device_type | open_ticket_count | device_owner | due_at 
1 | tablet  | 1     | bob   | 25/12/2016 
2 | smartphone | 0     |    | 
3 | printer  | 1     | sally  | 13/11/2016 

Как я бы это сделал?

Этот код создает 292 строки, но есть только 3 устройства и 2 билета?

SELECT devices.id, devices.device_type, devices.open_ticket_count, devices.primary_owner_name AS Assigned_Owner, tickets.id, tickets.due_at 

FROM devices CROSS JOIN tickets where devices.user_tag = '|pool devices|' AND tickets.due_at 

Любые идеи о том, как просто показать

Все устройства с due_at колонки?

+1

Используйте 'inner join', а не' cross join'. –

+0

Я ИЗБЕГАЮ, как мне изменить заголовок моего сообщения? (поздно пытаюсь заставить это работать и сделать опечатку!) – Andy

+0

Спасибо, что получает 292 строки также с помощью INNER JOIN? – Andy

ответ

0
SELECT D.id, D.device_type, D.open_ticket_count, D.device_owner, T.due_at 
FROM Devices D LEFT OUTER JOIN Tickets T 
ON D.id = T.id 

Вы хотите отобразить все строки из столбца слева, так что вам нужно LEFT OUTER JOIN.

0

Энди, попробуйте

SELECT devices.id, devices.device_type, devices.open_ticket_count, devices.device_owner AS Assigned_Owner, tickets.due_at 
FROM devices INNER JOIN tickets 
ON devices.id = tickets.id 
WHERE due_at IS NOT NULL 

хотя это предполагает, что tickets.due_at колонна будет null для строки, где id = 2

Но вы получите тот же результат, если исключены строки в таблице устройств, которые были a open_ticket_count = 0 (при условии, что это значение равно нулю, если нет соответствия билет строки

+0

Спасибо за помощь до сих пор, LEFT OUTER JOIN и INNER JOIN производят намного меньше строк, но все равно слишком много. – Andy

+0

есть способ выбора только устройств в определенной группе под названием «Устройства пула» – Andy

+0

Я попытался использовать WHERE devices.user_tag = '| pool devices |' но это не сработало. – Andy

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