我不知道怎么说这个但是说tbl1是一大群产品而且tbl2有一堆配件可以与产品相匹配。有两种ID类型:ID和PRODUCT。当tbl1.idtype = PRODUCT时,通常在tbl1中提供另一个名为subGroupID的ID。我试图在ID上链接它们,如果它们碰巧有一个PRODUCT ID,那么将tbl2 id链接到tbl1子组ID。
Select * from tbl1, tbl2
where tb1.idtype=tb2.idtype
and tbl1.id=tbl2.id
if tbl1.idtype=PRODUCT, then join on tbl1.subgroupID=tbl2.id, else don't try to do this join.
我怀疑你应该在这里使用case case,但我一直都会遇到错误。
答案 0 :(得分:1)
至少有两种方法可以解释这个问题。一种方法是,您希望查看所有PRODUCT类型,并且您还希望加入subgroupID字段而不是普通ID字段。
select ...
from tbl1
join tbl2
on tbl2.idtype = tbl1.idtype
and tbl2.id = tbl1.subgroupID
where tbl1.idtype = PRODUCT;
但是,您可能也想加入一般情况,只需使用PRODUCT的备用字段。
select ...
from tbl1
join tbl2
on tbl2.idtype = tbl1.idtype
and tbl2.id = case when tbl1.idtype = PRODUCT
then tbl1.subgroupID
else tbl1.id
end
where ...;
答案 1 :(得分:0)
你所描述的看起来像是N:M的关系,或者如果你喜欢多对多的关系。这意味着产品可以有零件或多件配件,配件可以适合零件或多件产品。如果是这样,您应该使用3个表:Product ProductsAccessories and Accessory。类似的东西:
Product
ProductId PK
Name
...
ProductsAccessories
ProductsAccessoriesID PK
ProductId FK
AccessoryId FK
Accessory
AccessoryId PK
Name
...
这将是最好的方式。
关于你的问题,很难回答你提出的问题,但我认为你正在寻找这样的事情:
SELECT * FROM
tbl1
LEFT JOIN tbl2 ON
tbl1.subgroupID = tbl2.subgroupID AND
tbl1.idType = 'PRODUCT'
你可能正在寻找的关键词是LEFT JOIN。它会在结果集中保留没有附件的产品。