Mysql选择并计算另一个表中的次数

时间:2017-11-16 17:15:59

标签: mysql

我想获得最好的SQL句子来获取数据但是我的句子需要7秒来搜索和检索具有9000条记录的表中的数据。

 --------------     ---------------
| Table 1      |   | Table 2       |
 --------------     ---------------
| ID           |   |  ID           |
| Ticket Number|   |  ID Relation  |
 --------------    |  Ticket Number|
                    ---------------

因此,表1包含票证的数据,但是另外2张票可以是"分组票"所以这张票的关系在表2中,包含相同的" ID关系"每张票都被分组。

我现在的判决是:

SELECT T1.ID, COUNT(REPEATT2.ID)
FROM Table1 T1
INNER JOIN Table2 T2 ON T2.TicketNumber=T1.TicketNumber
INNER JOIN Table2 REPEATT2ON REPEATT2.IDRelation=T2.IDRelation
GROUP BY T1.ID;

所以我正在做的是第一次" INNER JOIN"我得到了" ID关系"以及第二个" INNER JOIN"我得到所有具有" ID Relation"的文件。正如我所说,这句话需要7秒才能获得表1中包含9000个寄存器的表的数据。

例如,使用此值:

Table 1:
ID, Ticket Number
11   33
12   34
13   35

Table 2:

    ID, ID Relation  Ticket Number
    1   11             33
    2   11             34
    3   12             35

所以我想要结果:

T1.Ticket Number COUNT(T2.ID Relation)
33                2 
34                2
35                1

我想我错过了一些东西,如果有更多了解sql的人可以帮助我会很棒。

谢谢。

1 个答案:

答案 0 :(得分:0)

首先,如果我理解了你想要的是关系中的票数:

SELECT IDRelation, Count(TicketNumber)
FROM Table2
GROUP BY IDRelation

如果你想要T1.ID,那么:

SELECT T1.ID, Count(T2.IDRelation)
FROM Table2
INNER JOIN (
    SELECT IDRelation, Count(TicketNumber)
FROM Table2
GROUP BY IDRelation) T2 ON T2.IDRelation = Table2.IDRelation
INNER JOIN Table1 T1 ON Table2.TicketNumber = T1.TicketNumber
GROUP BY T1.ID

但是当你正在进行INNER JOIN时,如果你想要所有门票并计算它们之间的关系,这是非常无用的,这就是你需要做的事情:

SELECT T1.TicketNumber, Count(T2.IDRelation)
FROM Table1 T1
LEFT JOIN Table2 ON Table2.TicketNumber = T1.TicketNumber
INNER JOIN (SELECT IDRelation, Count(TicketNumber)
FROM Table2
GROUP BY IDRelation) T2 ON T2.IDRelation = Table2.IDRelation
GROUP BY T1.TicketNumber