Sql DB2:当为每个主ID找到多个类别类型的列时,选择所有数据行
您好,我有一张数千人的表格,每个人都购买了不同的汽车,并包含购买日期,如下所示:Sql DB2:当为每个主ID找到多个类别类型的列时,选择所有数据行,sql,db2,Sql,Db2,您好,我有一张数千人的表格,每个人都购买了不同的汽车,并包含购买日期,如下所示: ID Car Purchase_Date -- --- ------------- 1 Lancia 2000-01-24 1 Ford 2003-04-17 1 Honda 2007-11-10 1 Honda 2013-06-28 2
ID Car Purchase_Date
-- --- -------------
1 Lancia 2000-01-24
1 Ford 2003-04-17
1 Honda 2007-11-10
1 Honda 2013-06-28
2 Ford 1998-03-03
2 Ferrari 2007-04-19
3 Ford 1995-10-31
3 Honda 2008-08-20
3 Delorian 2230-01-01
如果车主拥有一辆福特和一辆本田,包括他们拥有的任何其他汽车,但他们必须拥有一辆福特和一辆本田。i、 e.如下所示:
ID Car Purchase_Date
-- --- -------------
1 Lancia 2000-01-24
1 Ford 2003-04-17
1 Honda 2007-11-10
1 Honda 2013-06-28
3 Ford 1995-10-31
3 Honda 2008-08-20
3 Delorian 2230-01-01
所以基本上,ID 2的所有数据都被删除了,因为他们拥有一辆福特,而不是本田。所有数据都是为person 1检索的,包括Lancia的数据,因为他们至少有一辆福特和一辆本田-person 3也是如此
我只需要一个起点,因为我很难理解这一点。显然,我只能选择与特定车辆相关的数据,例如:
select * from mytable
where Car in ('Ford','Honda')
但随后我丢失了我感兴趣的汽车的所有其他数据
我想我可以为我感兴趣的每种类型的汽车创建一个专栏,使用案例陈述告诉我他们是否有汽车或没有使用类似的东西:
select distinct id, Ford, honda from
(select distinct id,
case when (select distinct id from mytable where Car = 'Ford') is null then 0 else 1 end as Ford,
case when (select distinct id from mytable where Car = 'Honda') is null then 0 else 1 end as Honda
from mytable a)
在这里,我可以查询所有id,其中每列=1,并将id和内部联接列表保存到原始表中,并仅为这些id返回数据。然而,这对我来说似乎很慢,尤其是当不可避免地需要扩大数据库大小和标准所需的汽车数量时
有人对我如何处理这个问题有什么建议吗?在您在第条中使用的第一个查询中。该子句已翻译为conditionA或conditionB,因此,如果您只有两个品牌中的一个,那么查询也可以满足 您可以使用一个双exists子查询,一个用于本田,一个用于福特相关的in和 我想ID字段不是主键,因为您的表已重复 试试这个:
select t1.*
from mytable t1
where exists(
select 'hasford'
from mytable t2
where t2.id = t1.id
and t2.car = 'Ford'
)
and exists(
select 'hashonda'
from mytable t3
where t3.id = t1.id
and t3.car = 'Honda'
)
在第一个查询中,您使用了In子句。该子句已翻译为conditionA或conditionB,因此,如果您只有两个品牌中的一个,那么查询也可以满足 您可以使用一个双exists子查询,一个用于本田,一个用于福特相关的in和 我想ID字段不是主键,因为您的表已重复 试试这个:
select t1.*
from mytable t1
where exists(
select 'hasford'
from mytable t2
where t2.id = t1.id
and t2.car = 'Ford'
)
and exists(
select 'hashonda'
from mytable t3
where t3.id = t1.id
and t3.car = 'Honda'
)
您也可以在一个EXISTS中执行此操作,因为这是一个AND条件,使用联接,就像在另一个答案中一样。@brucezepplin:谢谢;祝您有愉快的一天您也可以在一个EXISTS中这样做,因为这是一个条件,通过使用连接,就像在另一个答案中一样。@brucezepplin:谢谢;祝你今天愉快