我正在使用设计糟糕的数据库,但遇到了一些问题。
我有两个表需要加入“非唯一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唯一。
答案 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
这将为您放置为*
的两个值赋予空值