MySQL 将两行算作一行

标签 mysql

我需要计算数据库中的匹配项。

输入:

id_to    id_from
1        2  
2        1  
1        3
3        1
1        4
5        1

第 5 行和第 6 行只有一个方向,因此不算数

示例输出:

id_match
1       
2
3

因此,对于 1(隐式)、2 和 3 存在反向匹配,但对于 4 和 5 则没有。

---- 已编辑 ----

假设表名是“example”,我想获取 id=1 的所有匹配项,那么 SQL 查询将是:

SELECT count(*) FROM
(SELECT id_to FROM example WHERE id_from = 1) as t1,
(SELECT id_from FROM example WHERE id_to = 1) as t2
WHERE t1.id_to = t2.id_from

但也许有更好的方法

最佳答案

你可以试试

SELECT DISTINCT id_from AS matched_id 
FROM   your_table AS data1 
WHERE  EXISTS (SELECT 1 
               FROM   your_table AS data2 
               WHERE  data1.id_from = data2.id_to 
                      AND data1.id_to = data2.id_from) 

我创建了一个演示 here

关于MySQL 将两行算作一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43532772/

相关文章:

mysql - 识别模式是否在文本字段中重复出现的 SQL 查询

php - 从 * 表名中选择 *

mysql - 使用 MySQL 从一个表更新另一个表时如何处理 NULL

mysql统计月份

mysql - 创建没有 mysql 表的自定义类型

mysql - 运行这个按计数的增加和减少排序的 MySQL 查询的最快方法是什么?

php - 如何在 php 中执行搜索?

php foreach 与嵌入的 html 抛出错误

java - Tomcat6 和 MySQL 问题

mysql - 具有多态连接的 Laravel 查询生成器不适用于 SQLite