【问题标题】:Is this sql command I wrote going to join these tables as desired?我写的这个 sql 命令会根据需要加入这些表吗?
【发布时间】:2015-01-31 12:46:46
【问题描述】:

问题

我想将两张表合并为一张表。我已经大大简化了我在工作中处理的问题,但这是基本思想。

表 1

ID Value 
1  0 
2  0 
3  0
4  1
5  1
6  0
7  -1 
8  -1 
9  1 
10 0 

现在我们有表 2

ID Value 
1  -1 
2  -1 
3  -1 
10  1 

我想加入 table1 和 table 2 以便得到以下信息:

ID Value 
1  -1 
2  -1 
3  -1 
4  1 
5  1
6  0 
7 -1 
8 -1 
9  1
10 1 

尝试

由于数据库很大,我的第一次尝试非常愚蠢并且浪费了我很多时间。它是这样的:

SELECT ID, 
       CASE WHEN Table1.ID = Table2.ID THEN Table2.ID ELSE Table1.ID 
FROM Table1, Table2 

嗯,这是一个诚实的错误,但我仍然觉得这样做很糟糕。当我做it 时,我有这种感觉。

我认为以下内容可以解决我的问题,但我没有那么自信。有人可以发表评论并让我知道我是否走在正确的道路上?

SELECT A.ID, A.Value
INNER JOIN B 
ON A.ID = B.ID  

我觉得我很亲近,但如果能提供任何帮助,我将不胜感激。我将继续尝试这个,但不确定我是否在维护数据完整性。我会更乐意为任何愿意发表评论的人贡献代表。

【问题讨论】:

    标签: sql sql-server database join sql-view


    【解决方案1】:

    你想要一个left joincoalesce()

    select t1.id, coalesce(t2.value, t1.value) as value
    from table1 t1 left join
         table2 t2
         on t1.id = t2.id;
    

    【讨论】:

    • 我会试试这个。很高兴你给出了术语。我发现了这个:w3schools.com/sql/sql_join_left.asp
    • 非常感谢。这就像一个魅力一样解决了这个问题并教会了我一些东西。
    【解决方案2】:

    试试这个:

    SELECT A.ID, 
           CASE 
             WHEN A.Value=0 AND A.ID IN (SELECT ID FROM #TAB2 )THEN B.Value  
             ELSE A.Value
           END VALUE
    FROM #TAB1 A
    LEFT JOIN #TAB2 B 
    ON A.ID = B.ID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多