选择语句,其中每个字段包含多个值

时间:2014-02-20 19:38:42

标签: mysql sql

所以我有三张桌子:

供应商 款式 vendor_styles

供应商可以有很多样式。因此,对于给定的供应商ID,vendor_styles中可以有多行。

我想要做的是给一个供应商,我想找到所有与样式没有任何重叠的供应商。因此,如果我拥有的供应商是摄影师和摄像师,我想找到所有不是摄影师而不是摄像师的供应商。现在发生的事情是,鉴于这种情况,如果供应商是供应商,摄影师和dj,它将被返回,因为它与第一个供应商进行比较时有一种不存在的风格。但我想确保如果任何样式与未返回的样式相同。

我跑的选择语句是:

select * 
from vendors, vendor_styles 
where vendors.id = vendor_styles.vendor_id 
  and vendor_styles.style_id not in 
    (select style_id from vendor_styles where vendor_id = <vendor_id>);

问题在于它基本归结为

(23,25) not in (22, 23, 25)

由于22不是前者,因此条件为真。我想要得到的是,如果第一组值中的任何值在第二组值中,则条件为假。

1 个答案:

答案 0 :(得分:0)

此查询应返回正确的结果:

SELECT v.*
FROM
  vendors v
WHERE
  NOT EXISTS (
    SELECT *
    FROM vendor_styles vs1 INNER JOIN vendor_styles vs2
         ON vs1.style_id = vs2.style_id
            AND vs1.vendor_id = 1 --- insert vendor id here
    WHERE
      vs2.vendor_id = v.id)

请参阅小提琴here