如何从同一个表的两列中获取一行中的不同结果?

时间:2013-12-17 13:41:45

标签: mysql sql select

如果标题不充分,请先告诉我。

我有一张像 -

这样的表格
CREATE TABLE `test` (
  `id` int(10) NOT NULL DEFAULT '0',
  `senderid` int(10) DEFAULT NULL,
  `recid` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

样本数据 -

id  senderid  recid  
1   1         2      
2   1         3      
3   3         1      
4   6         1      
5   4         1      
6   4         2      
7   2         4  

现在我想知道所有发送的senderid 1的事务,以及从recid 1到senderid的所有事务 - 的修改 我做了这个 -

SELECT GROUP_CONCAT(recid SEPARATOR ', ') AS trans 
FROM test 
WHERE senderid =1 
UNION 
SELECT GROUP_CONCAT(senderid SEPARATOR ', ') AS trans 
FROM test 
WHERE recid =1 
GROUP BY recid; 

结果是 -

trans 
2, 3 
3, 6, 4 

我在两行中如何将两者结合使用不同的值 是否可以使用sql实现这样的效果?

谢谢。

4 个答案:

答案 0 :(得分:2)

是的,有点逻辑:

SELECT GROUP_CONCAT((case when senderid = 1 then recid else senderid end) SEPARATOR ', '
                   ) AS trans 
FROM test 
WHERE senderid = 1 or recid = 1 ;

答案 1 :(得分:0)

试试这样:

SELECT
  id,
  senderid,
  recid,
  IF(senderid =1, "senderid","recid") as transaction
FROM test 
WHERE 1 IN (senderid,recid)

答案 2 :(得分:0)

您可以简单地使用union all来获得所需的结果。第一个查询将返回所有具有senderid = 1的事务,第二个查询将返回recid = 1的行,然后使用union all组合以获取所有事务

select * from test where senderid=1
union all
select * from test where recid =1

答案 3 :(得分:0)

你可以尝试这个:

select distinct recid from test where senderid=1
union
select distinct senderid from test where recid =1

您应该使用union代替union all,因为它可以减少所有重复。我希望这会有所帮助。