如何使用一个查询从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 );