当我使用连接查询时,我得到组合的行

时间:2015-03-29 18:20:09

标签: mysql join

我使用以下查询:

select * 
from TEST2 t1 join TEST2 t2 
where  t1.TID <> t2.TID 
  and t1.ST = t2.ST 
  and t1.SAL > t2.SAL 
  and t1.TR < t2.TR;

我的表中有16个属性。但是当我触发上面的查询时,我得到两行的结果,在一行中有32个属性。

我希望将结果作为两个不同的行而不是一行,即两行的组合。

6|Mark|Murro|M|970|-3134|Denver|CO|80251|S|Y|70000|4|0|0|0|0    
2|Chunho|Black|M|719|-4662|Denver|CO|80290|M|N|60000|5|0|0|0

如上所示,两个行合并为

6|Mark|Murro|M|970|-3134|Denver|CO|80251|S|Y|70000|4|0|0|0|0|2|Chunho|Black|M|719|-4662|Denver|CO|80290|M|N|60000|5|0|0|0

表架构:

CREATE TABLE `TEST2` (
  `TID` int(11) DEFAULT NULL,
  `FN` text,
  `LN` text,
  `GD` text,
  `AC` int(11) DEFAULT NULL,
  `PH` text,
  `CT` text,
  `ST` text,
  `ZIP` int(11) DEFAULT NULL,
  `MS` text,
  `CH` text,
  `SAL` int(11) DEFAULT NULL,
  `TR` int(11) DEFAULT NULL,
  `STX` int(11) DEFAULT NULL,
  `MTX` int(11) DEFAULT NULL,
  `CTX` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

但我希望他们分开  请帮帮我

1 个答案:

答案 0 :(得分:0)

有点不清楚你真正想做什么,但以下应该实现你的逻辑

select t.*
from test2 t
where exists (select 1
              from test2 t2 
              where t.tid <> t2.tid and t.st = t2.st and t.sal > t2.sal and t.tr < t2.tr
             ) or
      exists (select 1
              from test2 t2 
              where t.tid <> t2.tid and t.st = t2.st and t.sal < t2.sal and t.tr > t2.tr
             );

因为你想要两个行,所以需要检查两个方向的条件。