2010-09-17 118 views
1

我有2个表(有以上,但联合国有关质疑)optionValueproductStock加入多个领域的一个表

我想从optionValue表选项名称为每个选项1,选项2,选项3(中下面将查询应有助于更有意义)

下面

是我的尝试,目前的查询,如果所有选项都设置,但返回空值,如果没有设置任何选项,它仅适用:

SELECT s.option1, n1.name s.optionName1, 
      s.option2, n2.name s.optionName2, 
      s.option3, n3.name s.optionName3 
    FROM productStock as s 
    INNER JOIN optionValue n1 on s.option1 = v1.optionValueID 
    INNER JOIN optionValue n2 on s.option2 = v2.optionValueID 
    INNER JOIN optionValue n3 on s.option3 = v3.optionValueID 
    WHERE s.productStockID = 1 

我明白为什么这是行不通的,因为当选项null疗法是没有匹配到optionValue表,但林不知道如何解决它(如果它是可以解决的)

我在几个地方读关于使用IN或COALESCE,但我不明白如何使用它们。

回答

0

你真正需要的是先修改数据库设计。任何时候你有这样的领域: s.option1,s.option2,s.option3

然后你真正需要的是一个子表来存储信息。当你需要6个选项或25个时会发生什么?这是一个非常糟糕的数据库设计,并且不会导致包含现在必须编写的无效查询的问题。这是您系统核心的癌症,需要在完成其他任何事情之前进行修复。