在 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。
我有一个 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。