0

3 つのテーブルから選択できます。そのうちの 2 つは常に必要 ( tbl_notestbl_clients) で、3 番目はオプション ( tbl_notes_categories) です。

私は常にLEFT JOINクエリで a を使用しており、主テーブルへの疑わしい相関レコードがあります。

しかし、以下のクエリでは結果が得られません。

私がLEFT JOINを間違って使用していることを誰かが指摘してくれますか?

SELECT n.*, c.clientname, nc.notecategoryname 
FROM tbl_notes n, tbl_clients c 
LEFT JOIN tbl_notes_categories nc ON n.categoryid = nc.categoryid 
WHERE n.clientid = c.clientid 
AND c.clientid = 12345 
ORDER BY n.dateinserted DESC

実際、SQLエラーが発生しています。 #1054 - 「on 句」の不明な列「n.categoryid」

categoryid確かに存在しますtbl_notes

おそらく、JOINS が実際にどのように機能するかをブラッシュアップする必要があります。その前に2つのデータベーステーブルを持つLEFT JOINを持つことはできないと思いますか?

余談ですが、必要なテーブルが複数あり、オプションのテーブルがいくつかある時期を予測できます。(この場合tbl_notes_categoriesはオプションです)

4

1 に答える 1

0

categoryid列がテーブルに存在すると仮定しtbl_notesます...

JOIN古い学校のカンマを結合演算子として使用するのではなく、構文を使用するようにクエリを書き直してみてください。(問題が間違った名前の列ではない場合、問題は2つのタイプの構文の混合にあると思われます...しかし、これは単なる疑いであり、古いスタイルのコンマ結合とJOINキーワードの混合をテストする理由はありません。)

私は次のように声明を書きます:

SELECT n.*, c.clientname, nc.notecategoryname 
  FROM tbl_notes n
  JOIN tbl_clients c 
    ON n.clientid = c.clientid 
  LEFT
  JOIN tbl_notes_categories nc 
    ON nc.categoryid = n.categoryid
 WHERE c.clientid = 12345
 ORDER BY n.dateinserted DESC

n(実際には、 を使用するのではなく、から返される個々の列を指定しますがn.*、これは単なるスタイル設定であり、SQL 構文の要件ではありません。)

于 2013-01-28T23:12:24.567 に答える