连接2个表会创建不需要的重复数据

时间:2015-01-27 20:44:08

标签: sql join

我无法弄清楚如何加入2个表格。 我只是希望从另一个表中加入1列,但添加它会在表中创建大量重复数据。

第一张表:"设备":

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列的设备?

2 个答案:

答案 0 :(得分: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

但如果您在设备表中排除了open_ticket_count = 0的行,则会得到相同的结果(如果没有匹配的票据行,则假设为零

答案 1 :(得分: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