2011-08-17 50 views
6

任何人都可以幫助我建立一個基於查詢語句的查詢。MySQL查詢 - 1列上有多個WHERE子句

正如您所看到的,我有一個產品,其規格和特定的組建在前端。我知道這個問題,1列不能同時是2個值,但我只需要那些2組中的產品。

爲了說明,product_specification_sid,ID 2種3和圖4是尺寸和去休息8〜11的顏色,所以我想選擇具有2和3

內加入表雙ISN」的產物因爲這些組(大小,顏色)在未來可能會有所不同。

SELECT 
    products.*, 
    categories.*, 
    manufacturers.* 
FROM products 
INNER JOIN product_categories ON product_category_pid = product_id 
INNER JOIN categories ON product_category_cid = category_id 
INNER JOIN manufacturers ON product_manufacturer = manufacturer_id 
INNER JOIN product_specifications ON product_specification_pid=product_id 
WHERE 
    product_active = 1 
AND 
(
    product_specification_sid in (3) 
AND 
    product_specification_sid in (8,9,6,7,10,11) 
) 
GROUP BY product_id 
+1

我發佈了一個答案,它進行了兩次內連接。但後來我讀到你的陳述,說你已經想過了。我不明白你爲什麼說這不是一個選項? – Eljakim 2011-08-17 12:43:32

回答

5

您可以改爲使用having子句。

SELECT 
    products.*, 
FROM products 
INNER JOIN product_categories ON product_category_pid = product_id 
INNER JOIN categories ON product_category_cid = category_id 
INNER JOIN manufacturers ON product_manufacturer = manufacturer_id 
INNER JOIN product_specifications ON product_specification_pid=product_id 
WHERE product_active = 1 
GROUP BY product_id 
HAVING COUNT(CASE WHEN product_specification_sid in (3) THEN 1 END) > 0 
AND COUNT(CASE WHEN product_specification_sid in (8,9,6,7,10,11) THEN 1 END) > 0 
+2

那些有條件的人應該是`> 1`嗎?我會認爲`> = 1` /`> 0`或者`= 1`。 – 2011-08-17 12:44:56

+1

該查詢一開始並沒有工作,但@Sam DeHaan修復了它!我取代了> 1 bij> = 1,它就像一個魅力! – PvdL 2011-08-17 12:55:04

1

據我瞭解,你要尋找的是具有符合某些條件的兩個匹配product_specification記錄的產品記錄。聽起來像我這樣直截了當的解決方案是:

SELECT products.*, categories.*, manufacturers.* 
FROM products 
INNER JOIN product_categories ON product_category_pid = product_id 
INNER JOIN categories ON product_category_cid = category_id 
INNER JOIN manufacturers ON product_manufacturer = manufacturer_id 
INNER JOIN product_specifications ps1 ON ps1.product_specification_pid=product_id 
INNER JOIN product_specifications ps2 ON ps2.product_specification_pid=product_id 
WHERE  product_active = 1 
    AND ps1.product_specification_sid in (3) 
    AND ps2.product_specification_sid in (8,9,6,7,10,11) 

順便說一句,「group by」將無法正常工作。您必須將所有不是聚合的組合在一起,並且每個表必須至少有一列,所以您至少有三個非聚合。 (好吧,也許MySQL在這裏有一些擴展,但是在標準的SQL中將會被獲得。)