3

結合時のSQL仕様を理解するのを手伝ってくれませんか。わかりません。on句で不明な列リストと呼ばれるエラーが発生し続けました。SQL構文でこのエラーが発生しました。ほとんど顔をこすりました。なぜ機能しないのか理解できません。優先順位などが原因であるという記事を読んだことがありますが、実際に混乱しています。ここで間違って行われました。

select product.name , product.price from product inner join product_category on          
(product_category.product_no = product.product_no ) where product_category.sub_category = 
"COFFIN";

私はこの質問がここで何百万回も聞かれていることを知っていますが、私が見たものはこの非常に基本的なSQL構文ではどこにも複雑ではありません。

私を助けてくれてありがとう。

編集:私はproduct_categoryが私の製品テーブルの直接の子ではないことに気付いたので、入力しただけです

 select * from product 
 join specifications 
 join product_category on ( specifications.product_no = product_category.product_no);

しかし、これでもエラーが発生しました。不明な列product_categoryです。

私はこのサイトと同様にいくつかの指示を読み、それに従いました: MYSQL不明な句次の結合の列に参加する 不明な列{0}のon句 MySQL「不明な列のOn句」

本当に欲求不満です。私は本当にそれを動作させることができません。

4

4 に答える 4

4

クエリに参加する新しいテーブルごとに、各テーブルに少なくとも1つのON句が必要です。スキーマ(テーブル名、列など)を知らなければ、何をしようとしているのかを正確に知ることは困難ですが、ここに例を示します

select *
from product p
join specifications s
    on p.product_no = s.product_no
join product_category pc
    on pc.spec_no = p.spec_no

テーブルエイリアスについてもこのリンクを確認してください。結合に関する良い例と、SQLの可読性を高める方法に関する非常に役立つ情報 http://msdn.microsoft.com/en-us/library/ms187455(v=sql.90).aspx

この記事は、さまざまな種類の結合を視覚的に表示するだけでなく、便利だと思いました http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

于 2013-02-16T19:17:43.057 に答える
1

製品と仕様の接合条件を指定する部分がありません。

select * from product 
join specifications YOU NEED SOMETHING HERE
join product_category on etc
于 2013-02-16T19:08:38.237 に答える
1

SQL構文を次のように変更しました。product_categoryを仕様に接続するキーを見落としていたため、必要なリンクを作成して機能しました。

SELECT *
FROM product
JOIN specifications ON ( product.product_no = specifications.product_no )
JOIN product_category ON ( specifications.spec_no = product_category.spec_no )
WHERE product_category.sub_category = "COFFIN"
LIMIT 0 , 30

また、仕様の接合条件が欠落していることに注意してください。この不注意は非常に多くの時間を要しました。どうもありがとう!

于 2013-02-16T19:18:03.933 に答える
1

デフォルトの結合タイプはですinner join。したがって、を書くjoinと、データベースはを読み取りinner joinon句を含めるように要求します。

条件なしで参加する場合は、cross join明示的に次のように指定します。

 select  * 
 from    product p
 cross join 
         specifications s
 inner join 
         product_category pc 
 on      pc.product_no = p.product_no
 left join
         some_other_table sot
 on      1=1

条件付きの最後の結合は、on 1=1を実行する別の方法ですcross join。右のテーブルが空の場合でも、左のテーブルから行を返すという点で微妙に異なります。

SQLフィドルでの例。

于 2013-02-16T19:21:20.427 に答える