1

私は2つのテーブルを持っています(質問には関係ありませんが、もっとありますoptionValueproductStock

各オプション 1、オプション 2、オプション 3 の optionValue テーブルからオプション名を取得したい (以下のクエリは、より意味をなすのに役立つはずです)。

以下は私の試みです。現在のクエリは、すべてのオプションが設定されている場合にのみ機能しますが、オプションが設定されていない場合は 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 の使用についていくつかの場所で読みましたが、それらの使用方法がわかりません。

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 に答える