2017-03-09 3 views
0

Je me demande si quelqu'un pourrait m'aider ici.Mysql Cartésien Produit: Chaque relation une seule fois

Voici ce que je dois faire: Extraction des identifiants de la table de langues dans une nouvelle table avec des relations uniques entre eux. Comme la formule n (n-1) pour les nœuds.

J'ai essayé avec un produit cartésien, mais cela ne fonctionne pas, car la colonne a = 1 et la colonne b = 2 est la même que lorsque la colonne a = 2 et la colonne b = 1. Je ne suis pas sûr peut le faire avec une instruction SQL, je voulais éviter de faire une solution de contournement avec un script PHP. Donc, le SQL ci-dessous est seulement la moitié du chemin.

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 

Je ne peux pas mettre une clé UNIQUE sur ces colonnes car chaque numéro apparaîtra plus d'une fois dans les deux. J'ai aussi essayé avec quelques SELECTS sur cette table, mais je n'ai pas trouvé comment éviter ces doublons de relations.

Merci à l'avance pour toute velléité

EDIT

requête qui fonctionne:

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

Utiliser '<' au lieu de ' ! = '. Cela reviendra (1, 2) mais pas (2, 1). –

+0

Merci - c'est exactement ce que je cherchais - un si petit changement dans la requête avec un excellent résultat! Ty beaucoup! – Ameliore

Répondre

0

Pourriez-vous essayer la requête suivante:

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