带有联接的MYSQL子查询

时间:2018-10-12 08:29:02

标签: mysql join

我正在尝试从4个表中检索记录,并想在左侧Join中使用子查询。所以基本上,我有 表a是开口表 o,id,o.namesdesc

表b是所有项目的表 b.id,b.titledesc,b,状态,b.edate

表a_b是已更改为项目的所有开口的表,就像一对多的联结表一样 o.id,b.id

表br是与其他项目的关系表 b.id b_rel_code(这也是与其他项目相关的b.id)

我要获取所有空缺,检查表a_b中是否有项目代码,获取项目代码与其他项目代码的关系,检查项目的状态,并获取项目的所有结束日期

非常感谢您的帮助。很久以来我一直在ing头。我想我只是看不到

SELECT 
  o.id,
  o.namesdesc,
  GROUP_CONCAT(ab.pcode) as junctionpcode,
  GROUP_CONCAT(br.scode) as proj_link_code, 
  GROUP_CONCAT(b.status) 
FROM table_ab as ab 
  Left JOIN tablea as o on ab.oid = o.id 
  Left Join tableb as b on ab.pcode= b.id 
  LEFT Join tablebr as br on br.b_rel_code=b.id 
where b.status='E' 
GROUP BY o.id order by junctionpcode

非常感谢,  好吧,可能我没有很好地解释。可能是示例数据应对此有所帮助

Tablea列出了开口的描述 id,namedesc 1,测试desc1 2,测试desc2

所有项目的Tableb列表

pcode,pname,status,edate
001,test pr1,E,30-10-2017
002,test pr2,E,30-05-2017
003,test pr3,A,30-10-2018

表br是与其他项目相关的项目的关系表

brid pcode rel_pcode
1    001    003
2    003    001

表a_b是tablea和tableb之间的连接表

abid pcode id
1    001   1
2    002   2
3    003   3 

所以我要实现的是获取所有与项目代码关联的空缺(来自tablea)(来自tablea_b),并仅针对状态E(来自表b)获得项目的状态和终止日期。但是它需要考虑该项目代码是否具有状态和版本的项目代码(来自表br)的链接。

我期望的输出是

a.id,concat(pcode+relcodeany),concat(pstatus,relstatus),concat(pedate,relcodeedate)
1   ,(001,003),(E,A),(30-10-2017,30-10-2018)

我希望我提供了足够的信息。 抱歉,很长的帖子

1 个答案:

答案 0 :(得分:0)

查询出了什么问题?

您没有添加任何示例数据或预期结果,但是从查询中添加了一些注释:

  1. 表tablebr通过表tableb(br.b_rel_code = b.id)进行联接,如果tableb不包含ab.pcode的任何行,或者您也不会从tablebr获取任何行
  2. b.status ='E'where子句将tableb的左联接转换为普通联接(仅包含匹配的行)。如果您希望左连接有效,则将条件移动到ON(on ab.pcode= b.id and b.status='E'
  3. 之后

请提供样本数据和预期结果。

相关问题