如何使用一个查询从mysql中的另一个表中查找不存在的值

如何使用一个查询从mysql中的另一个表中查找不存在的值,mysql,sql,database,Mysql,Sql,Database,我想找到每个农民的农产品类型数量、农民姓名和农产品总数,但我陷入了试图显示供应中不生产任何产品的农民的部分,然后在另一个查询中,我想扩展它以显示产量最高但不使用限制函数的农民 -- Table Farmer create table Farmer( FarmerID char(3), FarmerName varchar(40), FarmName varchar(40), FarmLocation varchar(40), primary key

我想找到每个农民的农产品类型数量、农民姓名和农产品总数,但我陷入了试图显示供应中不生产任何产品的农民的部分,然后在另一个查询中,我想扩展它以显示产量最高但不使用限制函数的农民

    -- Table Farmer
create table Farmer(
    FarmerID char(3),
    FarmerName varchar(40),
    FarmName varchar(40),
    FarmLocation varchar(40),
    primary key(FarmerID));


-- Table ProduceType
create table ProduceType(
    ProdTypeID char(3),
    ProdTypeName varchar(20),
    primary key(ProdTypeID));

-- Table Produce
create table Produce(
    ProduceID char(3),
    ProduceName varchar(20),
    ProdTypeID char(3),
    primary key(ProduceID),
    foreign key(ProdTypeID) references ProduceType(ProdTypeID));
-- Table Supplies
create table Supplies(
    ProduceID char(3),
    FarmerID char(3),
    Weight decimal(5,2),
    Metric varchar(10),
    PricePerWeight decimal(5,2),
    primary key(ProduceID,FarmerID),
    foreign key(ProduceID) references Produce(ProduceID),
    foreign key(FarmerID) references Farmer(FarmerID));
我当前的尝试不起作用

    select count(p.prodtypeid) as 'number of types of produce', farmername, count(p.produceid) as 'total number of produces'
from farmer f, supplies s, producetype pt, produce p
where f.farmerid = s.farmerid
and p.prodtypeid = pt.prodtypeid
and s.produceid = p.produceid
or not exists ( select ff.farmerid
                from farmer ff, supplies ss where ff.farmerid = ss.farmerid)
group by farmername;
输出应该是

Farmername | number of produce | number of producetye
Daniel          | 2                 | 2
Alex           |2                  |2
Lewis          | 1                  |1
Michale         | 0                 | 0
此查询提供“每个农民的农产品类型数量、农民姓名和农产品总数”

这个问题给出了“供应中不生产任何东西的农民”

限制-丢失的关系(在
Supplies
中的行
FarmerId
具有确定值,但
ProduceID
为空)不存在。为了保证这一点,请在表结构中将上述两列定义为NOTNULL


输出应为

选择f.FarmerName,
合并(计数(p.ProduceID),0)为“产品总数”,
合并(计数(不同的p.ProdTypeID),0)为`产品类型数`
来自农民f
使用(FarmerID)左连接
使用(ProduceID)左连接生产p
按FarmerName分组;

左连接不允许拒绝其他表中没有相应行的farmer行。COALESCE函数用零值替换为此类行获取的空值。

必须在单个查询中完成。不是两个独立的查询是我的problem@AnimRahman它必须在单个查询中完成。请编辑问题并添加所需的输出示例-我无法想象这样的输出会是什么样子。请检查它now@AnimRahman在这种情况下,您不需要获得“供应中不生产任何东西的农民”。我将很快添加一个查询。
SELECT COUNT(DISTINCT p.ProdTypeID) AS `number of types of produce`, 
       f.FarmerName, 
       COUNT(p.ProduceID) AS `total number of produces`
FROM Farmer f
JOIN Supplies s USING (FarmerID)
JOIN Produce p USING (ProduceID)
GROUP BY FarmerName;
SELECT FarmerName
FROM Farmer
WHERE NOT EXISTS ( SELECT NULL
                   FROM Supplies
                   WHERE Farmer.FarmerID = Supplies.FarmerID  );