代码之家  ›  专栏  ›  技术社区  ›  notforever

MySQL从一个或另一个表中选择

  •  2
  • notforever  · 技术社区  · 14 年前

    谢谢,为了您的帮助,我发布了我的问题的简化版本,但我真的不知道如何将左联接应用到大联接中,即:

    SELECT d.type, 
           d.item , 
           if(d.type='I', a.name, b.name) as name, 
           if(d.type='I', c.price,0) as price, 
           if(d.type='I',if(d.taxes='yes', 
           (c.priceWithTax*d.weight), (c.price*d.weight)),0) as totalprice 
      FROM d 
    inner join a on d.item=a.id 
    inner join c on d.item=c.item
         where c.sede =1
    

    问题是,当d.type='i'我需要表A中的项目,但如果d.type='s'我需要表B中的项目,价格在表C中。

    非常感谢你。

    3 回复  |  直到 14 年前
        1
  •  0
  •   Bill Karwin    14 年前
    select
      a.col1,
      b.col1,
      coalesce(c.col1,0)
    from a inner join b on a.col0=b.col1
      left outer join c on b.col2='apple' and c.col1=b.col0
    

    学习内容:


    我有一张生菜桌,一张烹调食物桌和一张菜单桌,菜单桌上有生菜和烹调食物这两种食物,这就是为什么我需要这样加入的原因。

    你需要一个单人间 food 给它一个列,记录生食和熟食之间的区别。

        2
  •  0
  •   Your Common Sense    14 年前

    如果您需要这样的东西,这显然表明您的数据库结构是错误的。
    应该是 表,您的查询变得简单明了。

        3
  •  0
  •   ejrowley    14 年前

    您可以使用左联接

    select
        a.col1,
        b.col1,
        ifnull(c.col1,0)
    from a 
        inner join b on a.col0=b.col1
        left join c on (c.col1 = b.col0 and b.col2="apple")
    where
        b.col2 != "apple" or (b.col2 = "apple" and c.col1 is not null)