SQL查询从同一列但多个值中进行选择

时间:2012-03-14 19:35:32

标签: mysql sql

这是我的桌子。

id  customer        product 
1   Tizag           Pen 
4   Gerald Garner   19" LCD Screen  
5   Tizag           19" LCD Screen  

我想选择同时拥有“Pen”和“19”LCD Screen的客户。因此,结果是客户'Tizag'。

我该怎么办呢。

谢谢和问候, Rupak Banerjee。

4 个答案:

答案 0 :(得分:6)

试试这个:

SELECT customer FROM table t1
JOIN table t2 USING( customer )
WHERE t1.product = 'Pen'
AND t2.product = '19" LCD Screen'

但是,如果更改产品数,则需要更改查询。可能有更好的方法来做到这一点,但我认为这样可行。

答案 1 :(得分:4)

天真:

SELECT DISTINCT customer FROM tblname t1
WHERE EXISTS (SELECT * FROM tblname WHERE product = 'Pen' AND customer = t1.customer)
    AND EXISTS (SELECT * FROM tblname WHERE product = '19" LCD Screen' AND customer = t1.customer)

但我认为一般来说,这类问题还有更多,你需要提供更多关于环境和参数范围的细节。

请注意,我并不一定主张这种方法,但是我给它(并且表示它很天真,这意味着它非常简单并且在表索引方面需要考虑很少)因为:

  1. 非常便携的ANSI - 没什么特别的事情
  2. 非常清楚(没有连接)SQL初学者以基于集合的方式解析和理解
  3. 显然可以通过参数(可能是动态SQL)进行扩展
  4. 缺点是:

    1. 表扫描,谁知道这个执行计划有多糟糕
    2. 与#1
    3. 问题相关的相关子查询
    4. 冗长,重复
    5. 任何SELECT *(即使在EXISTS内)都可能引起一阵眉毛

答案 2 :(得分:1)

SELECT CUSTOMER
FROM YOURTABLE yt1,YOURTABLE yt2
WHERE yt1.customer=yt2.customer
  AND yt1.product='Pen'
  AND yt2.product=''19" LCD Screen';

答案 3 :(得分:0)

select customer
from tablename
where product = 'Pen' AND
      customer IN (select customer from tablename where product = '19" LCD Screen');