2012-01-05 12 views
1

こんにちは、私はこのは、この自己の書き方をMySQLでクエリに参加

products_id | model_num | master_model_num 
    1  | cth001 | 0 
    2  | cth002 | 0 
    3  | cth003 | cth001 
    4  | cth004 | cth001 
    5  | cth005 | 0 
    6  | cth006 | cth002 

私の問題のようなテーブル構造が

は、私はテーブルに​​を提供し、それはすべての製品IDを取得する必要がありwhoes master_model_numはと同じです​​

私は次のクエリを試してみましたが、結果を生成しません

SELECT p.products_id 
FROM products p,products pp 
WHERE p.products_id=pp.products_id 
AND p.products_model=pp.products_master_model 
AND p.products_id='1' 
+1

をお試しくださいその単一のレコード。 – Dan

答えて

6
SELECT pp.products_id 
    FROM products p 
     INNER JOIN products pp 
      ON p.model_num = pp.master_model_num 
    WHERE p.products_id = '1' 
+0

MySQLで明示的な結合構文を使用しないでください。少なくとも5.1以下であれば、クエリオプティマイザが正しいプランを生成できなくなります(これは広範にテストしました)。 – PlexQ

+5

@PlexQ:このテストのいくつかの証拠(ブログ記事、バグレポートなど)を提供できますか?そんなことは聞いたことがない。 –

+0

@Joe Steffanelliこれはまさに私が必要とするものです。 +1これは –

-1
SELECT p.products_id FROM products p,products pp where p.model_num=pp.master_model_num and p.products_id='1' 
+0

結果の男性を生成しません –

1

SELECT products_id 
FROM products 
WHERE master_model_num = (SELECT model_num 
          FROM products 
          WHERE products_id = 1) 

は、この場合にはより多くの意味を成さないでしょうか?クエリの最後にAND p.products_id='1'があることで、1レコードしか返されないことが保証されます。

+0

内部クエリのないソリューション。私は内側のクエリでそれを行うことができます –

1

あなたは両方のテーブルにproducts_idに等結合持っている、とproducts_idがあなたのWHERE句の終わりに1にフィルタ処理されているので、あなただけ届き、与えられた例えばこの

SELECT 
    p.products_id 
FROM 
    products p 
INNER JOIN 
    products pp 
ON 
    pp.products_master_model = p.products_model 
関連する問題