Mysql Cartesian产品:每个关系只有一次

时间:2017-03-09 17:34:03

标签: mysql unique relationship cartesian

我想知道是否有人可以帮助我。

这是我需要做的: 在新表中拉出语言表的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,但我没有找到如何避免那些重复的关系。

提前感谢任何提示

修改

查询有效:

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

1 个答案:

答案 0 :(得分: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