如何编写MySQL查询来检查多行?

时间:2010-04-04 12:32:56

标签: 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查询,允许我搜索给定feature_product_id具有'y'feature_status_yn值的所有产品并返回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的更优雅的解决方案。

2 个答案:

答案 0 :(得分: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') ;

以上查询永远不会返回任何内容或始终返回零行。 你在AND& amp;之间感到困惑OR。

查询应如下

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' ;

答案 1 :(得分:0)

我认为马特是对的,但要理解你真正想要的东西有点难以理解?

如果要检索给定status_yn设置为yes的产品列表,如果有产品表(带主键product_id):

SELECT DISTINCT p.product_id 来自产品p LEFT JOIN功能f ON f.feature_product_id = p.product_id 在哪里f.feature_status_yn ='y' AND f.feature_product_id ='[ARG]'

我认为Matt请求应该更快,因为您在加入之前过滤了功能...

但是如果你是sql的新手试试我的请求并首先尝试第一部分: SELECT DISTINCT p.product_id 来自产品p LEFT JOIN功能f ON f.feature_product_id = p.product_id

这样您就可以看到您的表格如何加入以及如何利用此加入...