Sql内连接有三个表

时间:2015-06-23 00:48:53

标签: sql sql-server-2008

我有这个问题,我是SQL的新手。我有3张桌子:

TBL_PRODUCT

    prod_id, 
    prod_type, 
    prod_code, 
    prod_desc

TBL_DOCUMENT

    doc_id, 
    doc_name, 
    doc_expiry, 
    doc_term, 
    enable_amt

TBL_DOCUMENT_GROUP

    grp_id, 
    prod_type, 
    doc_type, doc_id 

对于每个文档,都有相应的产品,一对多。我无法弄清楚的是如何显示每个文档的产品。提前谢谢!

我很抱歉,但我真的不知道该怎么做,我所知道的只是SQL的基础知识。

2 个答案:

答案 0 :(得分:1)

根据您提供的架构,我假设您可以找到每个文档的所有产品 1.文档所在的document_group 2. document_group与哪个product_type相关联 如果是这种情况,这就是您的查询的样子:

SELECT doc_id, prod_id
FROM tbl_document AS td
JOIN tbl_document_group AS tdg ON td.doc_id = tdg.doc_id
JOIN tbl_product AS tp ON tdg.prod_type = tp.prod_type
WHERE doc_id = 1;

然而,您在上面概述的方案有点不同寻常。

答案 1 :(得分:0)

没有任何东西可以将TBL_PRODUCT中的prod_id绑定到TBL_DOCUMENT中的任何文档。 你能想到的唯一匹配的东西是:    给定一个文档(来自TBL_DOCUMENT)并将其与TBL_DOCUMENT_GROUP连接,您可以告诉它属于哪个产品组。    但是你永远不能将一个文档与一个产品匹配(这就是本设计中缺少的东西)。

这是你能得到的最接近的地方:

  select a.doc_id, a.doc_name, c.prod_type --// but not prod_id...that will create a cross join 
  from TBL_DOCUMENT a
    inner join TBL_DOCUMENT_GROUP b
      on a.doc_id = b.doc_id
    inner join TBL_PRODUCT c
      on c.prod_type = b.prod_type   

即。 TBL_DOCUMENT表缺少prod_id,或者您需要另一个表来定义doc_id和prod_id之间的关系...