所以我有三个表:Select语句,每个字段包含多个值
厂商 风格 vendor_styles
一个供应商可以有很多风格。因此,对于给定的供应商ID,vendor_styles中可以有多行。
我想要做的是给一个供应商,我想找到所有的供应商,与样式没有任何重叠。因此,如果我拥有的供应商是摄影师和摄影师,我想找到所有不是摄影师而不是摄影师的供应商。现在发生的情况是,在这种情况下,如果供应商是供应商,摄影师和dj,那么它将得到回报,因为它与第一个供应商比较时有一种不存在的风格。但是我想确定是否有任何样式是相同的,它不会被返回。
我跑的select语句是:
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是不是在前者的情况是真实的。我试图得到的是,如果第一组值中的任何值都在第二组值中,则条件为假。
也许使用INTERSECT或EXCEPT和计数(你正在寻找交叉点是零元素)[EXCEPT和INTERSECT(Transact-SQL)](http://technet.microsoft.com/en-us/library /ms188055.aspx) – Anssssss