mysql - 从不同的列中选择相同的值

标签 mysql

只有当 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/

相关文章:

php - 通过PHP将HTML表单数据插入mySQL(表单数组因表行数而异)

php - 拉拉维尔 : Route not found error

php - 多个 mysql 连接和正确的显示顺序

php - Wordpress PHP模板页面不断循环

mysql - tomcat jdbc连接池中缺少连接

mysql - 如何在mysql中按值获取所有行?

php - 在 Yii2 中执行原始 SQL 查询?

php - 将这一团乱麻的 PHP 变成一个 MySQL 查询

mysql - 从 Sql 数据库迁移到 NoSql 数据库的限制

java - 无法使用 JDBC 连接到 Windows 7 上的 MySQL,但可以通过 phpmyadmin 和其他管理工具工作?