2012-04-28 77 views
0

我有結構三個表如何將多個select查詢合併爲一個?

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 ; 

我在這裏對於提取refrence表Product_reference值Product_property & categories_id作爲

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 

現在我想這兩個查詢合併爲一,什麼是單一個寫這些查詢的方式。

我想這

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

但其沒有工作,可能是我錯過了一些語法。

+1

「它的位置不工作」 - 你能更具體嗎?什麼是錯誤? – 2012-04-28 13:36:16

+0

categories_id是所有表....我的意思是你使用它作爲外鍵相同嗎? – 2012-04-28 13:43:14

+0

從查看您的查詢,它不是很清楚爲什麼您要搜索'refrence' for records'where categories_id = 3'但是'product_details' for records' where categories_id = 1' - 以及您對您的查詢意圖的解釋做的很難理解。也許你可以澄清? – eggyal 2012-04-28 13:44:45

回答

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,因此: 它們都必須是1或兩者都必須是3 或 它們完全不同的「分類」是不相關的,或者恰好具有相同的名稱。

+1

這是** ALWAYS **將返回一個空的記錄集,因爲在其上已加入表的'categories_id'上的衝突過濾器。 – eggyal 2012-04-28 13:54:13

+0

哎呀...呃,我的編輯沒有足夠的數據,我的編輯太快了。 – GDP 2012-04-28 14:17:54