MySQL:在一条语句中合并 2 列的结果

标签 mysql sql join union

假设我有如下 2 个结果集

 R1        R2
| 1 |     | 5 |
| 2 |     | 6 |
| 3 |     | 7 |
| 4 |     | 8 |

我需要将这些结果组合成一个 SET, 所以我会有这样的东西:

 R3
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |

目前, 我正在使用像这样的 UNION 来执行此操作:

SELECT c_1 AS result FROM table WHERE c_1=3 OR c_2=3
UNION
SELECT c_2 AS result FROM table WHERE c_1=3 OR c_2=3

基本上,我最终在 table 上执行了两次相同的操作, 每次只检索不同的行。 有没有更有效的方法可以做到这一点? 我需要将结果放在一个列中,因为这是 IN 的限制。 从长远来看,我需要做的是这个

SELECT name FROM person WHERE person_id IN
(SELECT c_1 AS result FROM table WHERE c_1=3 OR c_2=3
UNION
SELECT c_2 AS result FROM table WHERE c_1=3 OR c_2=3)

有没有更好的方法来找到所有这些? 欢迎任何帮助。

最佳答案

除了 IN () 子查询,您还可以对 c_1 OR c_2 执行INNER JOIN

SELECT
  name
FROM 
  person
  /* Join against the other table on *either* column c_1 or c_2 */
  INNER JOIN `table` ON `table`.c_1 = person.person_id OR `table`.c_2 = person.person_id
WHERE
  /* And the WHERE condition only needs to be applied once */
  c_1 = 3 OR c_2 = 3

http://sqlfiddle.com/#!2/4d159/1

关于MySQL:在一条语句中合并 2 列的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14008092/

相关文章:

sql - 插入/更新时将数据类型 varchar 转换为数字时出错

具有多个连接的 mysql SELECT 查询需要最新的表数据

java - Hibernate:如何映射到静态表?

hadoop - Hadoop Reducer无法处理嵌套循环计算?

mysql - 这个mysql查询有什么问题?

mysql - Mantis 在 Mysql 上安装错误

php - 将复杂的 MySQL 查询空间计算转换为 Laravel Eloquent ORM 查询

来自命令行的 sqlplus 语句

android - 在设备上没有互联网连接的情况下启动 Android 应用程序会出现 FileNotFoundException

php - 如何检查数据库中是否不存在一行