1

我有 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

I understand why it doesn't work because when the option is nullther is no matches to the optionValuetable but im not sure how to fix it (if it is fixable)

我在几个地方阅读了有关使用 IN 或 COALESCE 的信息,但我不明白如何使用它们。

4

2 回答 2

2

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

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

SQL 连接的可视化解释

于 2010-09-17T17:50:36.317 回答
0

你真正需要的是它来纠正你的数据库设计。任何时候你有这样的字段:s.option1,s.option2,s.option3

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

于 2010-09-17T17:54:03.587 回答