mysql - 将列拆分为行,而不是经典的枢轴

标签 mysql

编辑:询问meta并决定修改我的问题,新增内容以粗体显示。

我有以下查询,用于查找重叠的时间段:

SELECT t1.id1, t2.id1
  FROM `mytable` AS t1
  JOIN `mytable` AS t2
    ON (
        ((t1.start_date BETWEEN t2.start_date AND t2.end_date))
        OR ((t1.end_date BETWEEN t2.start_date AND t2.end_date))
       )
 WHERE t1.id1 < t2.id1;

结果集是:

id1    id1
 6      7
 8      9
 5      11
 10     12

我需要以下结果,只需将所有值添加到单个列上,并添加一列以显示其中的行是成对的,以便稍后我可以使用该结果 here 。应该很简单,但我无法让它工作。

col    pair_id
 6       1
 8       2
 5       3
 10      4
 7       1
 9       2
 11      3
 12      4

最佳答案

不确定这是否有效,但请尝试:

SELECT t1.id1
... snip ...
WHERE t1.id1 != t2.id1;

这只是明确排除 self 重叠,并允许“7”记录显示为“6”上的重叠(根据您的示例结果)。

关于mysql - 将列拆分为行,而不是经典的枢轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13766756/

相关文章:

php - 执行此 PHP 脚本的最有效方法

mysql - 选择一个值,其中 SUM()

mysql - 查找期间计算器中的 OneToMany 和 ManyToOne

mysql - 仅导出结构时重置自动增量

php - 从 MYSQL 更新到 MYSQLI

php - 为什么这是 PHP 中的错误 MYSQL 查询?

php - MySQL 回显同时

mysql - 没有 join 语句的双重选择的 sql

php - 使用 $id 更新内容不起作用

mysql - 按随机非空条目分组