首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL查询中对单个列进行传递和操作?

在SQL查询中对单个列进行传递和操作?
EN

Stack Overflow用户
提问于 2015-05-04 17:47:08
回答 2查看 56关注 0票数 0

如何在SQL查询中进行传递和操作?以下是我的疑问:

代码语言:javascript
复制
select 
    distinct slr_product.seller_id, 
    slr_product.name,
    slr_product.price, 
    slr_seller.name 
from 
    slr_product join slr_seller 
where slr_product.seller_id = slr_seller.id 
and  slr_product.name in (
        "WEIL FELIX TEST*Proteus Antigen OX19, OX2 & OXK",
        "WIDAL TUBE AGGLUTINATION TEST",
        "ZINC, SERUM / PLASMA"
        ) 

我得到了这样的结果:http://postimg.org/image/dhh57uzjn/

另外,我尝试了AND操作,而不是IN操作符,但是没有得到结果。我想显示卖方id基于产品名称,具有这3种产品的名称。这里seller_id = 33有这些产品。我正在使用MYSQL。

EN

回答 2

Stack Overflow用户

发布于 2015-05-04 18:02:57

试试这个,你可以得到那些拥有三种产品的seller_id

代码语言:javascript
复制
Select slr_seller.seller_id,slr_seller.saler_name
From slr_seller
Where seller_id IN 
    (
    SELECT DISTINCT seller_id 
    FROM slr_product 
    WHERE slr_product.name in ( 'WEIL FELIX TEST*Proteus Antigen OX19, OX2 & OXK',
                                'WIDAL TUBE AGGLUTINATION TEST',
                                'ZINC, SERUM / PLASMA') 
    GROUP BY seller_id 
    HAVING count(DISTINCT slr_product.name) = 3   //number of product 
    )

SQLFIDDLE

更新的SQlFiddle

编辑:-带有产品名称

代码语言:javascript
复制
Select DISTINCT slr_seller.seller_id,slr_seller.saler_name, slr_product.name
From slr_seller join slr_product ON slr_product.seller_id = slr_seller.seller_id
Where slr_seller.seller_id IN (
SELECT DISTINCT seller_id 
FROM slr_product 
WHERE slr_product.name in ( 'WEIL FELIX TEST*Proteus Antigen OX19, OX2 & OXK',
                            'WIDAL TUBE AGGLUTINATION TEST',
                            'ZINC, SERUM / PLASMA') 
GROUP BY seller_id 
HAVING count(DISTINCT slr_product.name) = 3  )

SQLFIDDLE

票数 0
EN

Stack Overflow用户

发布于 2015-05-04 19:49:54

有几个查询模式将返回指定的结果。

一种选择是在相关子查询中使用EXISTS谓词。我认为这是最容易理解的,尽管对于大量的值列表来说有点难以处理;而且很难将这种方法扩展到处理“三分之二”类型的查询。而这通常不是最好的表现,其他选择通常表现得更好。

有了所有这些警告,作为这种方法的演示,只需附加到问题中的现有查询:

代码语言:javascript
复制
   AND EXISTS ( SELECT 1 FROM slr_product p1
                 WHERE p1.seller_id = slr_seller.id
                   AND p1.name = 'WEIL FELIX TEST*Proteus Antigen OX19, OX2 & OXK'
              )
   AND EXISTS ( SELECT 1 FROM slr_product p2
                 WHERE p2.seller_id = slr_seller.id
                   AND p2.name = 'WIDAL TUBE AGGLUTINATION TEST'
              )
   AND EXISTS ( SELECT 1 FROM slr_product p3
                 WHERE p3.seller_id = slr_seller.id
                   AND p3.name = 'ZINC, SERUM / PLASMA'
              )

这也是有可能得到一个“计数”的产品在列表中的卖家,然后过滤。将对外部查询返回的每一行执行关联子查询,因此这通常也不是最佳表现,但可以扩展到检查"2 / 3“。只需将其附加到问题中现有查询的末尾:

代码语言:javascript
复制
   AND 3 = ( SELECT COUNT(DISTINCT p.name)
               FROM slr_product p
              WHERE p.seller_id = slr_seller.id
                AND p.name IN ( 'WEIL FELIX TEST*Proteus Antigen OX19, OX2 & OXK'
                              , 'WIDAL TUBE AGGLUTINATION TEST'
                              , 'ZINC, SERUM / PLASMA'
                              )
           )

有时,通过将子查询作为内联视图运行,返回一组行,然后执行连接操作,我们可以获得更好的性能。

代码语言:javascript
复制
SELECT DISTINCT p.seller_id
     , p.name
     , p.price
     , s.name 
  FROM slr_product p
  JOIN slr_seller s
    ON s.id = p.seller_id
    -- inline view to return seller_id that sell all three products
  JOIN ( SELECT r.seller_id
           FROM slr_product r
          WHERE r.name IN ( 'WEIL FELIX TEST*Proteus Antigen OX19, OX2 & OXK'
                          , 'WIDAL TUBE AGGLUTINATION TEST'
                          , 'ZINC, SERUM / PLASMA'
                          ) 
          GROUP BY r.seller_id
         HAVING COUNT(DISTINCT r.name) = 3
       ) q
    -- only return seller_id that sell all three products
    ON q.seller_id = p.seller_id
 WHERE p.name in ( 'WEIL FELIX TEST*Proteus Antigen OX19, OX2 & OXK'
                 , 'WIDAL TUBE AGGLUTINATION TEST'
                 , 'ZINC, SERUM / PLASMA'
                 )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30036523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档