0

私は構造を持つ3つのテーブルを持っています

CREATE TABLE IF NOT EXISTS `refrence` (
  `products_ref_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `categories_id` int(11) NOT NULL,
  `Product_property` varchar(255) NOT NULL,
  `Product_reference` varchar(50) NOT NULL,
  PRIMARY KEY (`products_ref_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;


CREATE TABLE IF NOT EXISTS `product_details` (
  `products_id` int(11) NOT NULL AUTO_INCREMENT,
  `categories_id` int(11) NOT NULL,
  `FieldA` varchar(30) NOT NULL,
  `FieldB` varchar(50) NOT NULL,
  `FieldC` varchar(255) NOT NULL,
  `FieldD` varchar(255) NOT NULL,
  `FieldE` varchar(255) NOT NULL,
  `FieldF` varchar(255) NOT NULL,
  `Field_desc` text NOT NULL,
  PRIMARY KEY (`products_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=98 ;

ここでは、Product_propertyとcategories_idに関してrefrenceテーブルからProduct_reference値を抽出しています。

SELECT Product_reference FROM refrence where categories_id=3 AND Product_property ='xxx'

これで、このProduct_referenceはproduct_detailsテーブルのフィールド名になり、結果がabcであると想定します。したがって、product_detailsテーブルから個別のabcを次のように抽出したいと思います。

SELECT Distinct abc FROM product_details where categories_id=3

今、私は両方のクエリを1つに結合したいと思います。これらのクエリを1つに書き込む方法は何ですか。

私はこれを試しました

SELECT Distinct (
SELECT Product_reference FROM refrence where categories_id=3 AND Product_property ='xxx'
) as aa FROM product_details where categories_id=3

しかし、それは機能していません。構文が欠落している可能性があります。

4

1 に答える 1

1

何が機能していないのかを知らずに、これを達成しようとしているように見えます:

SELECT r.product_reference
FROM refrence AS r 
LEFT JOIN categories AS c ON (c.categories_id = r.categories_id AND r.categories_id=3 AND     r.product_property='zzz')
WHERE c.categories_id=1

Eggyal が指摘したように、これは、category_id=1 AND category_id=3 という不可能な条件のため、常に何も返さないため、次のいずれかになります。無関係であるか、たまたま同じ名前を持っているだけです。

于 2012-04-28T13:49:54.863 に答える