2017-03-09 11 views
0

私はここで私を助けることができるのだろうかと思います。Mysql Cartesian Product:各関係は一度だけ

これは私がする必要があることです: 言語テーブルのIDをすべて新しいテーブルの中で一意のリレーションシップを持つように引き出します。ノードの数式n(n-1)と同様です。

列a = 1で列b = 2が列a = 2および列b = 1のときと同じであるため、デカルト積で試しましたが機能しません。これをSQLステートメントで行うことができます。私はPHPスクリプトを使用して回避策を講じないようにしたいと考えていました。したがって、以下のSQLは半分に過ぎません。

DROP TABLE IF EXISTS lang_score; 
CREATE TABLE lang_score 
SELECT a.text_lang_id AS lang_1, b.text_lang_id AS lang_2 
FROM text_lang AS a, text_lang AS b 
WHERE a.text_lang_id != b.text_lang_id 

これらの列にUNIQUEキーを付けることはできません。なぜなら、それぞれの数値が両方に複数回表示されるからです。私もこのテーブルのSELECTSを試してみましたが、これらの関係の重複を避ける方法は見つけられませんでした。任意のヒントを事前に

おかげ

EDIT作品

問合せ:

DROP TABLE IF EXISTS lang_score; 
CREATE TABLE lang_score 
SELECT a.text_lang_id AS lang_1, b.text_lang_id AS lang_2 
FROM text_lang AS a, text_lang AS b 
WHERE a.text_lang_id < b.text_lang_id 
+0

使用 '<'の代わりに ' != '。それは(1,2)を返しますが、(2,1)は返しません。 –

+0

ありがとうございます - これは私が探していたものです。タイはたくさん! – Ameliore

答えて

0

では、次のクエリを試みることができる:

DROP TABLE IF EXISTS lang_score; 
CREATE TABLE lang_score 
SELECT a.text_lang_id AS lang_1, b.text_lang_id AS lang_2 
FROM text_lang AS a, text_lang AS b 
GROUP BY a.text_lang_id, b.text_lang_id