选择表关系

时间:2015-01-03 13:19:06

标签: sql select relationship

我需要帮助。我有3个这样的表:

product
    * id
    - name

supplier
    * id
    - name
    - active

product_supplier
    * id_product
    * id_supplier

最后一张表是否向供应商列出了产品。

我需要的是构建一个只返回活跃供应商但仍与特定产品无关的查询。

谢谢!

3 个答案:

答案 0 :(得分:1)

尝试使用子查询,如下所示:

SELECT *
FROM supplier
WHERE active = 'Y'
AND id NOT IN (SELECT DISTINCT id_supplier
               FROM product_supplier)

答案 1 :(得分:1)

这是您的问题:"我需要的是构建一个只返回活跃供应商但仍与特定产品无关的查询。"

您正在寻找拥有特定产品的有效供应商。

select s.id
from product_supplier ps join
     supplier s
     on ps.id_supplier = s.id
where s.active = 1
group by s.id
having sum(case when ps.id_product = XX then 1 else 0 end) > 0;

您也可以使用not exists

执行此操作
select s.id
from supplier s
where s.active = 1 and
      not exists (select 1
                  from product_supplier ps
                  where ps.id_supplier = s.id and
                        ps.id_product = XX
                 )

而且,您可以使用left join

执行此操作
select s.*
from supplier s left join
     product_supplier ps
     on ps.id_supplier = s.id and ps.id_product = XX
where s.active = 1 and ps.id_supplier is null;

这似乎是在SQL中表达这一点的最自然的方式。

答案 2 :(得分:0)

非常感谢......它与此合作。

SELECT * 
FROM supplier s
WHERE NOT 
EXISTS (
SELECT * 
FROM product_supplier ps
WHERE s.id = ps.id_supplier
AND ps.id_product =5
)
AND s.active =1