0

誰かがこれで私を助けてくれることを本当に願っています! 私は6つのテーブルを持っています:

製品
のprodid

Prodequipment
prodequipclassmainequipclassor
_
_


クラスIDを装備

Equipfunctions
のequipid
classid

機器
機器

Workshopequipmentworkshopidequipid
_
_

Products – 一部の製品 のリスト
Equipment – 一部の機器の リスト
Prodequipment – 製品を実行するために必要な機器のリスト。equipclassmain にリストされている機器を使用するか、equipclassor の機器に置き換えることができます。テーブル製品は、テーブル Prodequipment と 1 対多の関係にあります。つまり、1 つの製品を生産するために多くの異なるツール (機器) を使用しますが、equipclassmain/equipclassor のペアの誰でも使用することを選択できます。たとえば、写真を額装するには、木製フレームまたはプラスチック フレーム (1 組) と、カバー ガラスまたはカバー プラスチック (2 組目) を使用できます。必要に応じて組み合わせることができますが、両方のペアを使用する必要があります: カバーガラス付きの木製フレームまたはカバーガラス付きのプラスチックフレームまたはプラスチックカバー付きの木製フレームまたはプラスチックカバー付きのプラスチックフレーム。
EquipfunctionsEquipclasses – 1 つの機器をさまざまな方法で使用できるため、テーブル Prodequipment に直接リンクされていません。考えられるすべての機器のすべての単一使用がリストされているテーブル Equipclasses と、すべての機器の単一使用がリストされているテーブル Equipfunctions を作成しました。
Workshopequipment – ワークショップと使用している機器を一覧表示します。

ここで、2 つの異なる特定のワークショップ (workshopid = 1 と Workshopid = 4 としましょう) で製造できる製品のリストが必要です。つまり、これらのワークショップは両方とも、それらの製品を製造するために必要なすべての設備を備えています。これらのワークショップでは、上記で説明したのと同じ機器を使用する必要はないことに注意してください.

私はこのクエリを試しています:

SELECT prodid FROM Products JOIN (
    SELECT workshopid, prodlist, equipclassmain, equipclassor, 
        if( LOCATE( equipclassmain, prodlist ) >0 
            AND LOCATE( equipclassor, prodlist ) >0, 1, 0 ) AS pairstatus FROM Prodequipment JOIN
    (
        SELECT classid FROM Equipclasses JOIN (
            SELECT classid FROM Equipfunctions JOIN (
                SELECT workshopid, GROUP_CONCAT( equipid ) AS prodlist FROM Workshopequipment 
                    GROUP BY workshopid
            ) 
            equipfunclist GROUP BY equipid 
        ) equipclasslist GROUP BY classid
    ) WorkshopequipmentList HAVING pairstatus = 1 AND workshopid in (1, 4)
) prodbyworkshops ON classid = equipclassmain OR classid = equipclassor

しかし、「フィールド リストの列のクラス ID があいまいです」というメッセージが表示されます。ここで何が問題なのですか?

ありがとう!

4

2 に答える 2

8

クエリは、classid列を持つ複数のテーブルを参照しています。
したがって、句で参照classidすると、HAVINGどのテーブルを取得するかわかりませんclassid

列を含むテーブルの名前をtablename.classidどこに書く必要があります。(おそらく;クエリを見ていませんでした)tablenameclassidequipclasslist

于 2009-12-13T01:48:28.677 に答える
1

これは、クエリの次の部分からのものです。

...
SELECT classid 
FROM Equipclasses JOIN (
    SELECT classid
    FROM Equipfunctions...

EquipClasses と内部クエリの両方に classId があります。どちらを選択するかを指定する必要があります。

于 2009-12-13T01:51:32.447 に答える