1

我正在使用设计糟糕的数据库,但遇到了一些问题。

我有两个表需要加入“非唯一 ID”。如果出现错误,当前与数据库一起使用的软件会在 id 中设置一个“0 值”。这意味着如果我尝试加入它们,则会在 0 值上加入大量记录。

在两个表及其不唯一的 id 字段的示例下方,我想加入它们

tbl1    tbl2
-----------       
2        2
3        6
4        5
0        3
0        4
6        0
5        0
----------

我想要实现的是这个

tbl1    tbl2
-----------         
2        2
3        3
4        4
0        * (no join)
0        * (no join)
6        6
5        5
----------

换句话说,我不希望 tbl1 中的“0 值”与 tbl2 中的所有其他“0 值”连接。不过,我仍然希望在没有加入的情况下拥有记录 tbl1。

这可能在 1 个查询中吗?

额外信息:SQL SERVER 2005 并且没有使 ID 唯一的选项。

4

3 回答 3

3

您没有向我们展示表格的完整结构,因此我需要编写一些列,但基本上是这样的:

select *
from tbl1
   join tbl2 
     on tbl1.id = tbl2.t1_id 
    and tbl1.that_flag <> 0

请注意作为and条件一部分的join条件。

于 2012-09-25T12:37:07.537 回答
1
SELECT tbl1.id, tbl2.id
FROM dbo.tbl1 
LEFT OUTER JOIN dbo.tbl2
ON tbl1.id = NULLIF(tbl2.id, 0);
于 2012-09-25T12:42:19.463 回答
1

这应该可以解决问题

SELECT * FROM tbl1
LEFT JOIN tbl2 ON tbl1.value = tbl2.value and tbl2.value <> 0

这将为您输入的两个提供空值 *

于 2012-09-25T12:44:05.463 回答