我正在尝试加入两个表(称为table1和table2),但每个匹配只返回1个条目。在表2中,有一个名为“current”的列,它是'y','n'或'null'。我已经离开了加入两个表并放置了一个where子句来获取'y'和'null'实例,这些很容易。我需要帮助来获取连接到只有'n'的行的行,以返回'none'或'null'的一个实例。这是一个例子
表1
ID
1
2
3
表2
ID | table1ID |当前
1 | 1 | ÿ
2 | 2 |空
3 | 3 | ñ
4 | 3 | ñ
5 | 3 | n
我当前的查询加入table1.ID = table2.table1ID然后有一个where子句(其中table2.current ='y'或table2.current ='null')但是当没有'时它不起作用y'和值不是'null'。
有人可以提出一个像我一样加入表格的查询,但是像这样从table1获取所有3条记录吗?
查询返回
ID | table2ID |当前
1 | 1 | ÿ
2 | null |空
3 | 3 | null或none
答案 0 :(得分:1)
首先,我假设“null”值实际上是字符串而不是DB值NULL。 如果是这样,下面的查询应该有效(注意INS子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))
答案 1 :(得分:0)
你需要决定table2中三行中哪一行你想要table1id = 3:
3 | 3 | n
4 | 3 | n
5 | 3 | n
标准是什么?
答案 2 :(得分: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',这可能无法正常工作。