在 mysql table 中查找没有互惠记录的记录

Find records without reciprocal record in a mysql table

我有一个 table 假设它在一个字段中有颜色,在另一个字段中有形状,但没有特定的字段顺序:

FIELD1   | FIELD2
---------|----------
Red      | Triangle
Red      | Square
Red      | Circle
Triangle | Red
Square   | Red

我正在尝试查找没有互惠记录的记录并创建一个。所以在上面的 table 中没有

的倒数
Red | Circle

虽然有

Red | Triangle
Red | Square

是否有一个查询可以 a) 确定哪些记录没有倒数 2) 创建那些记录?

您可以执行以下操作:

SELECT a.FIELD2, a.FIELD1 FROM tbl a 
LEFT JOIN tbl b ON b.FIELD2=a.FIELD1 AND b.FIELD1=a.FIELD2
WHERE b.FIELD1 is NULL

请在此处查看工作示例:SQLfiddle1

SELECT 通过查找倒数记录将 table 加入自身。如果该记录 未找到 则原始 table 的记录将以相反的列顺序列出。

创建 丢失的记录,只需使用 INSERT 语句中的输出,例如:

INSERT INTO tbl (FIELD1,FIELD2)
SELECT a.FIELD2, a.FIELD1 FROM tbl a 
LEFT JOIN tbl b ON b.FIELD2=a.FIELD1 AND b.FIELD1=a.FIELD2
WHERE b.FIELD1 is NULL

完整示例演示 SQLfiddle2