2015-11-26 83 views
0

创建模拟帮助台票务服务。sql - 返回集没有来自内部连接的重复?

我有一个ticket表,其中包含客户创建的所有票据。 我有一个works_on表,其中包含经理已声明和正在处理的所有票据。

在这两个表中,我都有一个customerid来标识票证的所有者。

在客户菜单中,他们可以检查他们创建的所有工单,无论他们是打开的,在ticket表格中还是在works_on表格中工作。

我下面的代码给了我两张表的相同票。我只想看一次票。我怎样才能做到这一点?

SELECT * FROM ticket 
INNER JOIN works_on 
ON ticket.custid = works_on.customerid 
+0

你可以显示两个表的定义吗? –

+0

我认为你加入了错误的领域。你应该加入'ticket_id',而不是'customer_id'。 – Barmar

+0

'works_on'中不应该有'customerid'列。这违反了标准化。 – Barmar

回答

0

好日子,

尝试使用Group By

SELECT * FROM ticket 
     INNER JOIN works_on 
     ON ticket.custid = works_on.customerid 
     GROUP BY ticket.custid 

你也可以使用DISTINCT

的SELECT DISTINCT语句用于返回只尝试不同 (不同)值

+0

这只是为每个客户返回一张票,而不是所有的票。 – Barmar

0
SELECT * FROM ticket 
INNER JOIN works_on 
ON ticket.custid = works_on.customerid 
GROUP BY ticket.custid 

这会将客户ID相同的结果分组。

如果没有将选择修改为SELECT DISTINCT

+0

这只是为每个客户返回一张票。 – Barmar

0

您正在加入错误的列。当您加入customerid时,它会查找该客户的所有门票以及该客户的所有works_on行,并在它们之间创建一个交叉产品。您应该加入机票编号,因此您可以获得每张机票的相应行号为works_on的行。

SELECT * 
FROM ticket AS t 
INNER JOIN works_on AS w ON t.ticket_id = w.ticket_id 
WHERE t.custid = :customer