2012-07-18 40 views
0
CREATE TABLE VanNaar_4P 

SELECT 

a2.ID as Van,a2.lat as v_lat ,a2.lon as v_lon, 

a1.ID as Naar,a1.lat as n_lat ,a1.lon as n_lon 

FROM 

adressen a1 

JOIN adressen a2; 

該查詢寫入效率更高嗎?我有它的運行方式,以長期爲它的大小的感覺...... 基本上我有一個這樣的名單:MySQL效率/組合

1 a b 
2 d e 
3 i w 

我需要所有組合(每行的某些領域,基於一個唯一的ID)

+0

上連接字段(S)添加一個索引,並學習如何使用EXPLAIN – symcbean 2012-07-18 07:57:42

回答

0

首先,你的問題是對稱的,所以你可以做

CREATE TABLE VanNaar_temp 
SELECT 
    a2.ID as Van,a2.lat as v_lat ,a2.lon as v_lon, 
    a1.ID as Naar,a1.lat as n_lat ,a1.lon as n_lon 
FROM adressen a1 
INNER JOIN adressen a2 ON a2.id<a1.id; 

CREATE TABLE VanNaar_4P 
SELECT * FROM VanNaar_temp; 

INSERT INTO VanNaar_4P 
SELECT Narr, n_lat, n_lon, Van, v_lat, v_long 
FROM VanNaar_temp; 

DROP TABLE VanNaar_temp; 

這省去了零點的方式,即Van==Nar。如果你真的需要它們,添加

INSERT INTO VanNaar_4P 
SELECT 
    a2.ID as Van,a2.lat as v_lat ,a2.lon as v_lon, 
    a1.ID as Naar,a1.lat as n_lat ,a1.lon as n_lon 
FROM adressen a1 
INNER JOIN adressen a2 ON a2.id=a1.id; 
0

某些JOIN條件如何?

+0

如?我需要所有可能的組合...... – FireFox 2012-07-18 07:39:26

0

查詢每possoble組合:

SQLFIddleExample

SELECT 
* 
FROM tbl t1, tbl t2 

您所查詢的每一個可能的組合:

SELECT 
a2.ID as Van,a2.lat as v_lat ,a2.lon as v_lon, 
a1.ID as Naar,a1.lat as n_lat ,a1.lon as n_lon 
FROM adressen a1, adressen a2 

一些示例數據:

INSERT INTO tbl 
(type, details) 
VALUES 
('a', 'b'), 
('g', 'z'), 
('k', 'l'), 
('c', 'a'); 

結果:

| TYPE | DETAILS | 
------------------ 
| a |  b | 
| g |  z | 
| k |  l | 
| c |  a | 
| a |  b | 
| g |  z | 
| k |  l | 
| c |  a | 
| a |  b | 
| g |  z | 
| k |  l | 
| c |  a | 
| a |  b | 
| g |  z | 
| k |  l | 
| c |  a |