如果标题不充分,请先告诉我。
我有一张像 -
这样的表格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实现这样的效果?
谢谢。
答案 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
,因为它可以减少所有重复。我希望这会有所帮助。