我有两张table:
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只包含mode1的值而不包含mode2的值的情况,反之亦然。
谢谢。
5条答案
按热度按时间mctunoxg1#
如果你需要两种模式,那么我建议使用
inner join
:内部联接将确保这两个值都存在于
b
.因为这两种模式都需要存在,实际上你不需要
tablea
:实际上,如果你只是需要
aid
如果两者都存在,还可以执行以下操作:这根本不需要加入表。
flvtvl502#
http://sqlfiddle.com/#!9/2db6c5/1号
试试这个;
dpiehjr43#
这是一个称为pivot的过程。
并且可以使用group by和
MAX(CASE END)
条款。having子句确保b.aid同时具有包含1和2模式的记录。
pbwdgjma4#
这应该起作用:
2lpgd9685#
我不知道为什么表a的目的是什么。但我认为这将是起点。
也许一个子选择也可以做到这一点,但是我认为表b的双连接对于较大的表来说会花费更少的内存。
提示:应该避免使用“name”和“mode”等字段名。它们是sql中的保留字,可能会导致混乱的结果。