将多个字段连接到一张表

发布于 2024-09-24 12:56:15 字数 778 浏览 5 评论 0原文

我有 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
    来自产品库存为 s 
    s.option1 = v1.optionValueID 上的 INNER JOIN optionValue n1
    s.option2 = v2.optionValueID 上的 INNER JOIN optionValue n2
    s.option3 = v3.optionValueID 上的 INNER JOIN optionValue n3
    其中 s.productStockID = 1

我理解为什么它不起作用,因为当选项为 null 时,与 optionValue 表没有匹配项,但我不确定如何修复它(如果可以修复)

我在几个地方读到过有关使用 IN 或 COALESCE 的内容,但我不明白如何使用它们。

I have 2 tables (there are more but un related to question) optionValue and productStock

I want to get the option names from the optionValue table for each option1, option2, option3 (the query below will should help to make more sense)

below is my attempt, the current query it only works if all options are set but is returns null if any option is not set:

    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 null ther is no matches to the optionValue table but im not sure how to fix it (if it is fixable)

I read in a couple of places about using IN or COALESCE but I don't understand how to use them.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

飘逸的'云 2024-10-01 12:56:15

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

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

SQL 连接的可视化解释

It seems like some of your syntax is a little incorrect.

Apart from that you want LEFT OUTER JOIN instead of INNER JOIN.

Visual explanation of SQL joins.

不语却知心 2024-10-01 12:56:15

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

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

What you really need first it to correct your database design. Anytime you have fields like this:
s.option1,s.option2, s.option3

Then what you really need is a child table to store the information. What happens when you need 6 options or 25? This is a very bad database design and will cause no end of problems incuding the inefficent query you now have to write. This is a cancer at the heart of your system and needs to be fixed before anything else is done.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文