Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-显示两列,其中第一列值在表C中,第二列值不在表C中_Mysql - Fatal编程技术网

MySQL-显示两列,其中第一列值在表C中,第二列值不在表C中

MySQL-显示两列,其中第一列值在表C中,第二列值不在表C中,mysql,Mysql,假设有两个表:必须有产品和购买产品 我想为每个客户展示他们已经生产的产品 作为col A(GROUP_CONCAT)购买,以及他们仍然需要作为col B(GROUP_CONCAT)购买哪些产品 预期结果: |id_b | buyed | left | |1b | 1a | 2a, 3a | |2b | | 1a, 2a, 3a | PS:如果标题错了,我很抱歉,我只是不知道该说什么左是一个关键词,你不能用它 以下是解决方案: selec

假设有两个表:必须有产品和购买产品 我想为每个客户展示他们已经生产的产品 作为
col A
(GROUP_CONCAT)购买,以及他们仍然需要作为
col B
(GROUP_CONCAT)购买哪些产品

预期结果:

|id_b  | buyed  | left       |
|1b    | 1a     | 2a, 3a     |
|2b    |        | 1a, 2a, 3a |

PS:如果标题错了,我很抱歉,我只是不知道该说什么

左是一个关键词,你不能用它

以下是解决方案:

select B.id_b, COALESCE(R1.buyer, '') buyer, COALESCE(R2.lft, '') lft
from
B, 
(select B.id_b , GROUP_CONCAT(DISTINCT A2.id_a SEPARATOR ', ') as   buyer
from B
left join A A2
on Exists(select * from C where A2.id_a = C.id_a and C.id_b = B.id_b)
group by B.id_b
) R1,
(
select B.id_b , GROUP_CONCAT(DISTINCT A2.id_a SEPARATOR ', ') as  `left` 
from B 
left join A A2 on  
NOT Exists(select * from C where A2.id_a = C.id_a and C.id_b = B.id_b)
group by B.id_b
) R2
where
B.id_b = R1.id_b and B.id_b = R2.id_b

这里有一个方法。获得用
集团公司购买的物品很容易,但不购买却不是一件简单的事

select
t2.id_b,
group_concat(t1.id_a) as buyed,
case 
when group_concat(t1.id_a) is null 
then (select group_concat(id_a order by id_a) from tableA) 
else substring_index((select group_concat(id_a order by id_a) from tableA),
concat(group_concat(t1.id_a order by t1.id_a),','),-1)
end as `left`
from tableB t2
left join tableC t3 on t3.id_b = t2.id_b
left join tableA t1 on t1.id_a = t3.id_a
group by t2.id_b

是的,买了很容易,但不是“不买”,这真的很难,谢谢你的解决方案:在我认为有问题后停下来,这是顺序,如果买的列从2a开始,左列将是1a、2a、3a,因为它只是子字符串,你能看看吗?也许你可以在SQL Fiddle上给我演示一下,为了证明这一点谢谢你给我演示,我认为你的解决方案是正确的,谢谢
select
t2.id_b,
group_concat(t1.id_a) as buyed,
case 
when group_concat(t1.id_a) is null 
then (select group_concat(id_a order by id_a) from tableA) 
else substring_index((select group_concat(id_a order by id_a) from tableA),
concat(group_concat(t1.id_a order by t1.id_a),','),-1)
end as `left`
from tableB t2
left join tableC t3 on t3.id_b = t2.id_b
left join tableA t1 on t1.id_a = t3.id_a
group by t2.id_b