如何用表内一个字段关联查询不同表

clipboard.png

clipboard.png

clipboard.png

我想查询第一张表内以及其关联附属表内的属性,举个例子,比如我查到第一张表内的id1的,获取type为1,根据type并关联到对应的表二,并根据 表一.id = 表二.assembly_id 获取表二内的属性,同理,我查到表一内id2的,获取其type2,根据type关联表三,获取出表三中对应的属性。
求教如何用一条sql 查询表一内所有的信息以及关联表内的属性

阅读 5.5k
4 个回答

在主表中的id存在唯一约束且标签表中的assembly_id也存在唯一约束的条件下,
可以得出结论:

  1. 一个assembly存在且仅存在一个属性
    即如果主表与多个标签表同时进行join的话,结果表的行数与原始表行数一致
  2. 在join的标签表的多个属性字段中,存在最多一个非null的值
    如果标签表并不多的情况下,可以使用以下方法进行实现
SELECT 
main.*
COALESCE(lab1.lab_name,lab2.lab_name) as lab_name
FROM main 
LEFT JOIN lab1 ON main.id=lab1.aid
LEFT JOIN lab2 ON main.id=lab2.aid
...
CREATE OR REPLACE PROCEDURE SF_TEST
  cursor cur1 is
     select * from a_tab a
  temp1 cur1%rowtype;
  begin
    for temp1 in cur1 loop
      if temp1.type=1 then
          select * from b_tab b where temp1.id=b.assembly_id
      end if;
      if temp1.type=2 then
          select * from c_tab c where temp1.id=c.assembly_id
      end if;
    end loop;     
end SF_TEST;

这样?

如果表2和表3合并后,assembly_id是唯一的,可以参考下面的语句

SELECT t1.*, t_union.*
FROM t1 LEFT JOIN (
  SELECT assembly_id, color, '' as text FROM t2
  UNION ALL
  SELECT assembly_id, '' as color, text FROM t3
) t_union  
  ON t1.type = t_union.assembly_id 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题