我需要帮助。我有3个这样的表:
product
* id
- name
supplier
* id
- name
- active
product_supplier
* id_product
* id_supplier
最后一张表是否向供应商列出了产品。
我需要的是构建一个只返回活跃供应商但仍与特定产品无关的查询。
谢谢!
答案 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