mysql - 在同一个表中的列设置的条件下,使用同一个表中的两个值进行 SQL 查询

标签 mysql sql database

我有这两张表:

TableA:
aid ! name
--- ! -----
1   ! Paper
2   ! Rock
3   ! Sciz

Table B (aid is TableA FKEY)
id ! aid ! area  ! mode
-- ! --- ! ----- ! ----
1  ! 1   ! 200   ! 1
2  ! 1   ! 240   ! 2
3  ! 2   ! 300   ! 1
4  ! 2   ! 290   ! 2
5  ! 3   ! 100   ! 1
6  ! 3   ! 110   ! 2

我想编写一个将返回以下结果的查询:

aid ! area(mode=1) ! area(mode=2) 
--- ! ------------ ! ------------
1   ! 200          ! 240
2   ! 300          ! 290
3   ! 100          ! 110

如何在 mySQL 中完成此操作?我还需要排除表 B 仅包含模式 1 的值而不包含模式 2 的值的情况,反之亦然。

谢谢。

最佳答案

这是一个称为枢轴的过程。
并且可以结合使用 GROUP BY 和 MAX(CASE END) 子句来完成。
HAVING 子句确保 B.aid 具有包含 1 和 2 模式的两个记录。

SELECT 
   B.aid 
 , MAX(CASE WHEN B.mode = 1 WHEN B.area ELSE 0 END) AS 'area(mode=1)'
 , MAX(CASE WHEN B.mode = 2 WHEN B.area ELSE 0 END) AS 'area(mode=2)'
FROM 
 B
GROUP BY
 B.aid 
HAVING
   SUM(B.mode = 1) = 1
 AND
   SUM(B.mode = 2) = 1
ORDER BY 
 B.aid ASC

关于mysql - 在同一个表中的列设置的条件下,使用同一个表中的两个值进行 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49880399/

相关文章:

mysql - 使用 sqlite 进行多个查询第二个查询仅给出第一个结果

mysql - 从 MySQL 的表中选择前 3 个值

c++ - 如何将数据从txt文件写入数据库?

database - 在 PostgreSQL 表中创建多个索引的缺点

php - 在 2037 年之后存储 MySQL 日期的正确方法

mysql - MySQL数据库在哪里存储数据?

php - mysqli - 有多少就太多了(非常慢)

mysql - 自动更新数据库 "id"字段

mysql - vBulletin 4.1.4 中的 SQL 数据库错误

php - 查找 MAX AVG 的 SQL 请求