只有当 id1 等于 id2 时,我才必须在 data2 中插入 data1 的值,即使在不同的行中也是如此。
MySql
Example
+---------------------------+
| MyTable |
+---------------------------+
| id1 | id2 | data1 | data2 |
+-----+-----+-------+-------+
| 1 | 2 | data1 | 0 |
+-----+-----+-------+-------+
| 2 | 1 | data2 | 0 |
+-----+-----+-------+-------+
| 3 | 4 | data3 | 0 |
+-----+-----+-------+-------+
| 4 | 3 | data4 | 0 |
+-----+-----+-------+-------+
| 5 | 6 | data5 | 0 |
+-----+-----+-------+-------+
这是结果的一个例子
+---------------------------+
| MyTable |
+---------------------------+
| id1 | id2 | data1 | data2 |
+-----+-----+-------+-------+
| 1 | 2 | data1 | 0 |
+-----+-----+-------+-------+
| 2 | 1 | data2 | data1 |
+-----+-----+-------+-------+
| 3 | 4 | data3 | 0 |
+-----+-----+-------+-------+
| 4 | 3 | data4 | data3 |
+-----+-----+-------+-------+
| 5 | 6 | data5 | 0 |
+-----+-----+-------+-------+
CREATE TABLE IF NOT EXISTS `MyTable` (
`id1` int(6) NULL,
`id2` int(6) NULL,
`data1` varchar(50) NULL,
`data2` varchar(50) NULL,
PRIMARY KEY (`id1`)
) DEFAULT CHARSET=utf8;
INSERT INTO `MyTable` (`id1`, `id2`, `data1`, `data2`) VALUES
('1', '2', 'data1','0' ),
('2', '1', 'data2','0'),
('3', '4', 'data3','0'),
('4', '3', 'data4','0'),
('5', '6', 'data5','0');
也许还有其他不使用 COALESCE() 的解决方案,也可以排除 id2 等于 id1 的行,只包括 id1 等于 id2 的行
SELECT
t1.id1,
t1.id2,
t1.data1,
COALESCE(t2.data1, t1.data2) AS `data2`
FROM MyTable AS t1
LEFT JOIN MyTable AS t2
ON t1.id1 = t2.id2 AND
t1.id2 = t2.id1
Result
id1 id2 data1 data2
1 2 data1 data2
2 1 data2 data1
3 4 data3 data4
4 3 data4 data3
5 6 data5 0
最佳答案
您可以执行“Self Left Join”匹配 id1
和右侧表的 id2
,反之亦然。
如果匹配(即使在不同的行),右侧表 data1
将不会是 null
。然后我们可以使用它代替 data2
。
SELECT
t1.id1,
t1.id2,
t1.data1,
COALESCE(t2.data1, t1.data2) AS `data2`
FROM your_table AS t1
LEFT JOIN your_table AS t2
ON t1.id1 = t2.id2 AND
t1.id2 = t2.id1
关于mysql - 从不同的列中选择相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53363193/