如何有条件地加入表格?

时间:2012-09-25 12:34:40

标签: sql sql-server-2005

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

我有两个表需要加入“非唯一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唯一。

3 个答案:

答案 0 :(得分:3)

你没有向我们展示表的完整结构,所以我需要编写一些列,但它基本上是这样的:

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

请注意属于and条件的join条件。

答案 1 :(得分:1)

SELECT tbl1.id, tbl2.id
FROM dbo.tbl1 
LEFT OUTER JOIN dbo.tbl2
ON tbl1.id = NULLIF(tbl2.id, 0);

答案 2 :(得分:1)

这应该可以解决问题

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

这将为您放置为*

的两个值赋予空值