2015-09-04 118 views
0

我需要创建一个包含表格和另一个视图的视图。创建一个包含表格和视图的视图

表包含下列字段:

  • job_no
  • ap_tax_exempt

视图包含以下字段:

  • job_no
  • hard_tax_exempt
  • soft_tax_exempt

棘手的部分是,在视图中的job_no值在表中的job_no值的子集,当我将这些创建新的看法,我需要确保它们保持独特。换句话说,如果表格[1,2,3,4,5]和视图具有[2,3,5],则最终视图应该具有[1,2,3,4,5]而不是[1 ,2,2,3,3,4,5,5。此外,表中并非所有的job_no值都有相应的hard_tax_exempt和soft_tax_exempt列的值,所以我不确定是否需要对此做些特别的事情,或者SQL是否足够聪明以自动将NULL分配给那些细胞。

实施例表中的数据:

job_no ap_tax_exempt 
------ ------------- 
    1   True 
    2   True 
    3   False 
    4   False 
    5   True 

实施例视图数据:

job_no hard_tax_exempt soft_tax_exempt 
------ --------------- --------------- 
    2   taxable   NULL 
    3   nontaxable   NULL 
    4   NULL    taxable 

我需要的最终视图是这样的:

job_no ap_tax_exempt hard_tax_exempt soft_tax_exempt 
------ ------------- --------------- --------------- 
    1   True    NULL    NULL 
    2   True    taxable    NULL 
    3   False   nontaxable   NULL 
    4   False    NULL    taxable 
    5   True    NULL    NULL 

任何帮助,将不胜感激。

+0

只是要清楚。你需要帮助来创建SQL,事实之一是一个视图不应该与问题相关,因为你知道创建视图了吗? –

回答

2
CREATE VIEW vw_NewView 
AS 
SELECT COALESCE(t.job_no, v.job_no) AS job_no 
     ,t.ap_tax_exempt 
     ,v.hard_tax_exempt 
     ,v.soft_tax_exempt 
FROM TableName t 
FULL JOIN ViewName v 
ON t.job_no = v.job_no; 

看到一个Working Demo

+0

@Rahul给定的样本数据完全连接和左连接都会给出相同的结果。如果你阅读这个问题,我认为OP是在完全连接查询之后。 –

+0

这是正确的。在你的答案中增加了一个小提琴演示。 – Rahul

1

你需要left join因为不是所有的table记录有看法。这是一个SQLFiddle Demo,证明它的工作原理。

CREATE VIEW finalView 
AS 
    SELECT T.job_no, 
      T.ap_tax_exempt, 
      V.hard_tax_exempt, 
      V.soft_tax_exempt 
    FROM Table T 
    LEFT JOIN View V 
     ON T.job_no = V.job_no 
+0

@Rahul完成。 TY。 –

+0

我试过这个,但是结果视图仅包含视图中的job_no值,而不包含表中的值。所以,回到上面的例子,列有1,2,3而不是1,2,3,4,5。 –

+0

此外,如果你有这个结果'[1,2,2,3,3,4,5,5] .'是因为你做了一个'INNER JOIN'而不是'LEFT JOIN' –

0

尝试

**Different SQL JOINS** 
  1. INNER JOIN:返回所有行时,有两个 表

  2. LEFT JOIN至少一个匹配:返回左表中的所有行以及来自右右表匹配 行JOIN:从右边 表返回所有行和左表匹配的行

  3. FULL JOIN:返回所有 行当存在一个匹配 使用Left Join

    :表

你的案件

Sql Joins