我有2个表(有更多但与问题无关)optionValue
和productStock
我想从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的内容,但我不明白如何使用它们。
答案 0 :(得分:2)
答案 1 :(得分:0)
首先,您需要更正数据库设计。任何时候你都有这样的字段: s.option1,s.option2,s.option3
然后你真正需要的是一个用于存储信息的子表。当你需要6个选项或25个时会发生什么?这是一个非常糟糕的数据库设计,并且不会导致您现在必须编写的无效查询的问题。这是您系统核心的癌症,需要在其他任何事情发生之前得到解决。