3

次のMySQLクエリを使用してデータを取得しようとしています:

SELECT m.*, t.*
FROM memebers as m, telephone as t
INNER JOIN memeberFunctions as mf ON m.id = mf.memeber
INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber
WHERE mf.function = 32

しかし、私は常に次のエラーが発生します:

#1054 - Unknown column 'm.id' in 'on clause'

列は存在し、クエリは 1 つのテーブルのみで正常に機能します (たとえば、電話を削除した場合)

誰かが私が間違っていることを知っていますか?

4

2 に答える 2

15

このリンクによると、結合を構築するときに両方の表記を混同しないでください。を結合するために使用しているコンマ memebers as m, telephone as tと、その後の への呼び出しによりinner join、不明な列エラーが発生しています。

これに対処するCROSS/INNER/LEFT JOINには、コンマの代わりに使用します。

以前は、コンマ演算子 (,) と JOIN はどちらも同じ優先順位を持っていたため、結合式 t1, t2 JOIN t3 は ((t1, t2) JOIN t3) と解釈されていました。現在、JOIN の優先順位が高いため、式は (t1, (t2 JOIN t3)) として解釈されます。この変更は、ON 句を使用するステートメントに影響します。これは、ON 句が結合のオペランドの列のみを参照でき、優先順位の変更により、それらのオペランドの解釈が変わるためです。

教育目的で、クエリを追加しています。次のようにする必要があると思います。

SELECT m.*, t.*
FROM memebers as m 
    JOIN telephone as t
    JOIN memeberFunctions as mf ON m.id = mf.memeber AND mf.function = 32
    JOIN mitgliedTelephone as mt ON m.id = mt.memeber

tと を結合していないためm、最終結果はデカルト積になります。あなたはそれを改訂したいと思うかもしれません。

お役に立てば幸いです。

于 2012-06-24T18:22:04.100 に答える
-1

テーブルに参加することが要件のようですmembersが、テーブルに参加していtelephoneます。順序を変更するだけです。

SELECT 
    `m`.*,
    `t`.* 
FROM
    `memebers` AS `m` 
    JOIN `telephone` AS `t` 
    JOIN `memeberFunctions` AS `mf` 
        ON `m`.`id` = `mf`.`memeber` 
        AND `mf`.`function` = 32 
    JOIN `mitgliedTelephone` AS `mt` 
        ON `m`.`id` = `mt`.`memeber`;

これがお役に立てば幸いです。ありがとうございました!!

于 2012-06-24T18:22:25.760 に答える