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

use*_*939 1 mysql sql

这是我的桌子.

id  customer        product 
1   Tizag           Pen 
4   Gerald Garner   19" LCD Screen  
5   Tizag           19" LCD Screen  
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点.

谢谢和问候,Rupak Banerjee.

Rya*_*n P 7

试试这个:

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

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


Cad*_*oux 5

天真:

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)
Run Code Online (Sandbox Code Playgroud)

但我认为总的来说,这类问题还有更多,您需要提供有关环境和参数范围的更多详细信息。

请注意,我不一定提倡这种方法,但我给出了它(并将其表示为幼稚,这意味着它非常简单并且很少考虑表索引),因为:

  1. 这是非常便携的 ANSI - 没什么特别的
  2. SQL初学者以基于集合的方式解析和理解是非常清楚的(没有连接)
  3. 显然是可以通过参数扩展的(也许对于动态SQL)

缺点是:

  1. 表扫描,谁知道这个执行计划会有多糟糕
  2. 相关子查询,与#1 的问题有关
  3. 冗长、重复
  4. 任何 SELECT * (甚至在 EXISTS 中)都可能引起注意