2013-05-03 44 views
0

我有以下表和数据:最佳方式加入此查询

Tables 
----------- 
CREATE TABLE primarys 
(primaryid BIGINT(20) NOT NULL AUTO_INCREMENT, 
PRIMARY KEY (primaryid)); 

CREATE TABLE patients 
(primaryid BIGINT(20) NOT NULL, 
patientid BIGINT(20), 
patientName VARCHAR(50), 
PRIMARY KEY (primaryid)); 

CREATE TABLE patientvisit 
(primaryid BIGINT(20) NOT NULL, 
visitid BIGINT(20), 
visitdate DATE, 
PRIMARY KEY (primaryid)); 

Data 
--------- 
INSERT INTO primarys values (1); 
INSERT INTO primarys values (7286); 
INSERT INTO primarys values (7287); 

INSERT INTO patients VALUES (1,'1','John'); 
INSERT INTO patients VALUES (7286,'1', ''); 
INSERT INTO patients VALUES (7287,'1', ''); 

INSERT INTO patientvisit VALUES (7286,'1','1997-12-18'); 
INSERT INTO patientvisit VALUES (7287,'2','1998-02-25'); 

我需要写输出数据,如下所示的查询:

primaryid | patientid | patientname | visit | visitdate 
------------------------------------------------ 
7286  | 1   | John   | 1  | 1997-12-18 
7287  | 1   | John   | 2  | 1998-02-25 

我能想出如何使用外部连接和子查询可以很好地工作,但是当我开始添加大型数据集时,mysql性能开始显着下降。

如果有人能提出最优化的方式来查询这些数据并获得所需的输出,我将不胜感激。

谢谢

+1

您可以尝试索引键列。 – kwelsan 2013-05-03 11:00:29

+0

桌子“questions_1_100”与其他桌子有什么关系?通过哪一列? – 2013-05-03 11:06:26

+0

索引会有所帮助,但是我担心你提到的子查询与我的猜测一样,如何将这些表连接在一起不需要子查询。如果你使用的是相关的子查询,那么这也可能解释了糟糕的性能。 – Kickstart 2013-05-03 12:58:31

回答

0

对于在您的问题中显示的具体值,此查询将执行。

SELECT q2.primaryid, q_1, q_2, q_4, q_5 FROM questions_101_200 q2 
CROSS JOIN questions_1_100 

但是您的数据和结构对我来说没有多大意义。如果你更多地解释你想要做什么,我可以给你一个更有意义的答案。

+0

哇!马杰塔,十字路口似乎这样做。我从来没有见过这个。我会直视这个!非常感谢! – user2324001 2013-05-03 14:59:54

+0

实际上,它在这个例子中有效,但是当有多个主题和多个访问时,则不再有效。 – user2324001 2013-05-03 15:11:45

+0

感谢Marjeta,请在上面的其他答案中查看更多信息。 – user2324001 2013-05-03 15:28:41