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; 

このクエリはもっと​​効率的に書くことができますか?私はそれがそのサイズのために長く走っているような気がします...基本的に私はこのようなリストを持っています:

1 a b
2 d e
3 i w

そして、すべての組み合わせが必要です(一意のIDに基づいて、行ごとにいくつかのフィールド)

4

3 に答える 3

0

可能なすべての組み合わせを照会します。

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 |
于 2012-11-19T08:24:31.463 に答える
0

いくつかのJOIN条件はどうですか?

于 2012-07-18T07:36:15.517 に答える
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;
于 2012-07-18T07:50:04.433 に答える