Mysql where类中具有行比较的sql查询

Mysql where类中具有行比较的sql查询,mysql,sql,oracle,postgresql,firebird,Mysql,Sql,Oracle,Postgresql,Firebird,我有两张表,客户和产品。客户可以拥有多个产品 我正在尝试检索没有特定产品的客户 例如,10位客户购买了A和B,另外10位客户购买了A、B和C。如何检索那些没有C产品的客户?对于您当前的数据库结构,这是您正在寻找的: select c.id, c.name, c.phone, c.address from Customers c where not exists (select * from products p where p.customer_id =

我有两张表,
客户
产品
。客户可以拥有多个产品

我正在尝试检索没有特定产品的客户


例如,10位客户购买了
A
B
,另外10位客户购买了
A
B
C
。如何检索那些没有
C
产品的客户?

对于您当前的数据库结构,这是您正在寻找的:

select c.id, c.name, c.phone, c.address 
from Customers c
where not exists (select * from products p 
                  where p.customer_id = c.id and p.id = 'c') 

但是,您应该考虑创建一个第三个表来存储个人购买。

select *
FROM customer c
WHERE NOT EXISTS (SELECT 1 from products p 
                  WHERE p.customer_id = c.id)
您真的应该(正如@Tony andrews和@Adrian所建议的那样)有第三个表来存储哪些客户购买了哪些产品的详细信息

有点像:

**Customer**
Id
Name
Address
Phone

**Product**
Id
Name
Price

**Customer_Product**
customer_id
product_id

这意味着您正在从产品表中删除冗余。考虑一下如果一个产品名称稍微改变了你需要做什么——而不是更新多行(就像你现在必须做的那样),你只需要更新1行,你就根本不需要触摸你的事务历史了。

你需要提供你的表结构。我们不是通灵者!这里大概至少有三个表:
客户(又称客户)可以买东西,
产品可以买,还有第三个表,例如
购买
显示哪些客户购买了哪些产品。我说的对吗?客户id姓名电话地址产品id姓名价格客户_id@user1010861你真正应该做的是用DB结构更新你的问题…并添加家庭作业标签(如果是家庭作业)。我想你也不需要所有这些关系数据库中的答案。嗨,伙计们,这看起来像我有3个表,如下客户、产品、购买,换句话说,我有3个10个产品,我想从客户没有特定产品的数据库中提取所有记录,例如
select c.name,c.status,c.从采购处获得的联系电话p加入客户c on p.cid=c.id(产品a)
谢谢