将多个字段连接到一个表

时间:2010-09-17 17:36:16

标签: select mysql join multiple-columns

我有2个表(有更多但与问题无关)optionValueproductStock

我想从optionValue表中获取每个option1,option2,option3的选项名称(下面的查询将有助于更有意义)

下面是我的尝试,当前查询只有在设置了所有选项时才有效,但如果未设置任何选项则返回null:

    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的内容,但我不明白如何使用它们。

2 个答案:

答案 0 :(得分:2)

您的某些语法似乎有些不正确。

除此之外,您需要LEFT OUTER JOIN而不是INNER JOIN

Visual explanation of SQL joins

答案 1 :(得分:0)

首先,您需要更正数据库设计。任何时候你都有这样的字段: s.option1,s.option2,s.option3

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