dポイントプレゼントキャンペーン実施中!

MySQLにてSELECT文にて順列の抽出をしようと試みていますが、順列を出すためのSQL文がわからず困っています。

TABLE1
+-----+-----+-----+-----+
| NUM | A | B | C |
+-----+-----+-----+-----+
| 101 | 0 | 4 | 9 |
+-----+-----+-----+-----+
| 102 | 2 | 2 | 0 |
+-----+-----+-----+-----+
例えば上記の様なテーブルがあって、NUM=101のA,B,Cを取り出して
049
094
409
490
904
940
のような順列を作り出してPHPから渡した変数D(仮にvar=409)と照らし合わせようと試みていますが、1つの行の中の数字で順列を抽出するSQL文がわからず困っていますので、ご教授願います。

A 回答 (4件)

バージョンにもよりますが、サブクエリーが使えるなら、次のような解はどうでしょう?



select T0.a,T1.a,T2.a
from
(
select a as a from ttt where num = 101 union
select b as a from ttt where num = 101 union
select c from ttt where num = 101) as T0,
(
select a as a from ttt where num = 101 union
select b as a from ttt where num = 101 union
select c from ttt where num = 101) as T1,
(
select a as a from ttt where num = 101 union
select b as a from ttt where num = 101 union
select c from ttt where num = 101) as T2
where T0.a <> T1.a and T0.a <> T2.a and T1.a <> T2.a;
    • good
    • 0
この回答へのお礼

ありがとうございます。
サーバ2つで行っていますが、一方がサブクエリ無効なので少し残念でした

お礼日時:2008/05/17 02:30

データの持たせ方を換えられませんか?



CREATE TABLE `TABLE1`(
NUM char(3) NOT NULL
,NAME varchar(10)
,DATA char(1)
);

INSERT INTO `TABLE1` VALUES
('101','A','0')
,('101','B','4')
,('101','C','9')
,('102','A','0')
,('102','B','2')
,('102','C','2');

つまり
NUM NAME DATA
101 A 0
101 B 4
101 C 9
102 A 0
102 B 2
102 C 2
こんな構造でしたら、積をとって簡単に取り出せます

SELECT t1.NUM,CONCAT(t1.DATA,t2.DATA,t3.DATA) AS `ABC`
FROM `TABLE1` as t1
INNER JOIN `TABLE1` as t2
ON t1.NUM=t2.NUM
AND t2.NAME!=t1.NAME
INNER JOIN `TABLE1` as t3
ON t1.NUM=t3.NUM
AND t3.NAME!=t1.NAME
AND t3.NAME!=t2.NAME
    • good
    • 0
この回答へのお礼

データの持たせ方を変える権限がないのでこのままでいこうと思います。アドバイスありがとうございました。

お礼日時:2008/05/17 02:33

ANo.2です。


すみません。and 抜けました。

(a = substring($key, 1, 1) and b = substring($key, 2, 1) c = substring($key, 3, 1))



(a = substring($key, 1, 1) and b = substring($key, 2, 1) and c = substring($key, 3, 1))
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2008/05/17 02:32

配列が3程度まででよければ、地道に以下のSQLで良いのでは?



$key = '409';

select num from table1
where
(a = substring($key, 1, 1) and b = substring($key, 2, 1) c = substring($key, 3, 1))
or
(b = substring($key, 1, 1) and c = substring($key, 2, 1) a = substring($key, 3, 1))
or
(c = substring($key, 1, 1) and a = substring($key, 2, 1) b = substring($key, 3, 1))

必要に応じて
order by a, b, c
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!