0

我正在尝试加入两个表(称它们为 table1 和 table2),但每次匹配只返回 1 个条目。在 table2 中,有一个名为“current”的列,它可以是“y”、“n”或“null”。我已经离开加入了这两个表,并放置了一个 where 子句来让我得到 'y' 和 'null' 实例,这些很容易。我需要帮助来获取加入仅具有“n”的行以返回“none”或“null”的一个实例的行。这是一个例子

表 1 ID
1
2
3

表2
ID | 表1ID | 当前
1 | 1 | 是
2 | 2 | 空
3 | 3 | 4
| 3 | 5
| 3 | n

我当前的查询在 table1.ID=table2.table1ID 上加入,然后有一个 where 子句(其中 table2.current = 'y' 或 table2.current = 'null'),但是当没有 'y' 和该值不是“空”。

有人能想出一个像我一样加入表的查询,但像这样从 table1 中获取所有 3 条记录吗?

查询返回

身份证 | 表2ID | 当前
1 | 1 | 是
2 | 空 | 空
3 | 3 | 空或无

4

3 回答 3

1

首先,我假设“null”值实际上是字符串,而不是 DB 值 NULL。如果是这样,下面的这个查询应该可以工作(注意在 ON 子句中包含 where 条件)

select 
table1.ID as ID
,table2.ID as table2ID
,table2.current 
from table1 left outer join table2 
on (table2.table1ID = table1.ID and 
(table2.current in ('y','null'))

如果这确实有效,我强烈建议将“null”字符串值更改为其他值,因为它完全具有误导性……您或其他一些开发人员将来会浪费时间调试它。

如果“null”实际上是指空值,则将上述查询更改为:

select 
table1.ID as ID
,table2.ID as table2ID
,table2.current 
from table1 left outer join table2 
on (table2.table1ID = table1.ID and 
(table2.current = 'y' or table2.current is null))
于 2009-12-14T20:47:37.207 回答
0

您需要确定 table2 中 table1id = 3 的三行中的哪一行:

3 | 3 | n
4 | 3 | n
5 | 3 | n

标准是什么?

于 2009-12-14T20:47:34.570 回答
0
select t1.id
     , t2.id
     , case when t2.count_current > 0 then
           t2.count_current 
       else
           null
       end as current
from table1 t1
left outer join
(
  select id
  , max(table1id)
  , sum(case when current = 'y' then 1 else 0 end) as count_current
  from table2
  group by id
) t2
on t1.id = t2.table1id

但是,正如刚才有人指出的那样,一旦表 2 中有多行带有“y”的行,这可能无法按预期工作。

于 2009-12-14T20:47:51.920 回答