2010-04-04 69 views
1

我有一個包含產品的功能,數據的MySQL表:如何編寫MySQL查詢來檢查多行?

feature_id feature_product_id feature_finder_id feature_text feature_status_yn 
1    1      1     Webcam   y 
2    1      1     Speakers  y 
3    1      1     Bluray   n 

我想寫一個MySQL查詢,讓我來搜索有一個「Y」 feature_status_yn值對於給定的feature_product_id並返回所有產品feature_product_id。我們的目標是將其用作搜索工具,以便將結果過濾爲僅與請求的功能集匹配的產品ID。

SELECT feature_id FROM product_features WHERE feature_finder_id = '1' AND feature_status_yn = 'y'的查詢將返回給定產品的所有功能。但是,如何在分開的行上選擇具有'y'值的所有產品(feature_product_id)?

多個查詢可能是實現它的一種方式,但我想知道是否有純粹在SQL中的更優雅的解決方案。

+0

問題不明確,標題和內容也無法匹敵。 – Salil 2010-04-04 12:38:22

回答

1

@馬特

SELECT feature_product_id FROM cms_finder_product_features WHERE feature_finder_id = '1' AND (feature_id = '1' AND feature_status_yn = 'y') AND (feature_id = '2' AND feature_status_yn = 'y') AND (feature_id = '3' AND feature_status_yn = 'y') ;

Abovequery從來沒有任何回報或總是返回零行。 您在AND與&之間感到困惑。

查詢應該如下

SELECT feature_product_id FROM cms_finder_product_features WHERE feature_finder_id = '1' AND ((feature_id = '1' AND feature_status_yn = 'y') OR (feature_id = '2' AND feature_status_yn = 'y') OR (feature_id = '3' AND feature_status_yn = 'y')) ;

用更簡單的方式,可以使用

SELECT feature_product_id FROM cms_finder_product_features WHERE feature_finder_id = '1' AND feature_id in ('1', '2', '3') AND feature_status_yn = 'y' ;

+0

@Salil 謝謝!這正是我需要的。乾杯。 SELECT DISTINCT( feature_product_id ) FROM cms_finder_product_features WHERE feature_finder_id = '1' AND FEATURE_ID IN( '1', '2', '3' ) AND feature_status_yn = 'y' 的 – Matt 2010-04-04 12:57:40

0

我認爲馬特是正確的,但它是一個有點很難理解你真正想要的?

如果你想要檢索的已給定status_yn設置爲yes,如果有一個產品表的產品列表(與主鍵的product_id):

SELECT DISTINCT p.product_id 從商品P LEFT JOIN特徵F ON f.feature_product_id = p.product_id WHERE f.feature_status_yn = 'Y' 和f.feature_product_id = '[ARG]'

馬特請求應該會更快,我認爲反正既然你加入之前過濾功能.. 。

但如果找你新來的sql給一試我的請求,並嘗試首先第1部分: SELECT DISTINCT p.product_id 從商品P LEFT JOIN特徵F ON f.feature_product_id = p.product_id

使你會看到你的桌子是如何加入的,以及如何利用這種加入...