私は3つのテーブルをリンクするmysqlクエリをまとめようとしています。本質的には、表は以下の通りです。MYSQL - joinクエリで少し混乱する/
- - 製品に関する情報と基本的な価格が含まれています。
- product_depts - 製品を異なる部門にリンクするリンクテーブル。
- プロモーション - 別のリンクテーブル、プロモーション期間と商品IDに基づく価格をリンクします。
これは、クエリで次の行が削除された場合
SELECT p.id, `desc` , price1, price2, cost1, taxable, quantity, deptId, sale
FROM products p
INNER JOIN product_depts ON p.id = prodId
INNER JOIN promotions s ON p.id = s.id
WHERE MATCH (
`desc`
)
AGAINST (
'CLOVER'
IN BOOLEAN
MODE
)
ORDER BY `desc`
LIMIT 0 , 30
:
INNER JOIN promotions s ON p.id = s.id
そしてselect句から取り出しsale
、
何が起こる、ALLです商品表に「CLOVER」を含む説明を含む商品が戻されます。
削除されたクエリ部分が追加されると、プロモーション中のアイテム(プロモーションテーブルに一致するIDを持つアイテム)のみが返されます。 products
テーブルに「CLOVER」を含む、「プロモーション中」ではない追加の商品は除外されます。
私はmysqlに関して非常に限られた知識しか持っていないので、私はこの問題について多くの知識を持っている人だと思っていました。
私はそれを理解しているので、これは完全に動作するproduct_depts
テーブルからdeptId
を呼び出すのと本質的に同じものになります。それは私を混乱させています。
"プロモーション中"のアイテムだけが表示され、追加の結果が表示されないのは間違っていますか?
ありがとうございました!
代わりに「LEFT JOIN」を使用してください。 – diEcho