2013-05-03 76 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