我想获得最好的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的人可以帮助我会很棒。
谢谢。
答案 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