我如何为返回多个值的子查询执行SELECT ?

  • 本文关键字:查询 执行 SELECT 返回 sql
  • 更新时间 :
  • 英文 :


我有一个在数据库中使用SQL的问题。

这是我的代码:

CREATE TABLE Supplier 
(
Supplier_ID int NOT NULL PRIMARY KEY,
Name varchar(50) NOT NULL,
Phone int,
Email varchar(50) 
);
CREATE TABLE Batchofmeat 
(
Number_of_batch varchar(50) NOT NULL PRIMARY KEY,
Supplier_ID int NOT NULL REFERENCES Supplier(Supplier_ID),
Weight FLOAT NOT NULL,
Temperature FLOAT NOT NULL,
Price FLOAT NOT NULL
); 
SELECT Email 
FROM Supplier 
WHERE (SELECT Temperature FROM Batchofmeat 
WHERE Supplier.Supplier_ID = Batchofmeat.Supplier_ID) < 3;

问题是当我运行SELECT时,我得到以下错误:

子查询返回了多个值,当跟随=、!=、<、<=、>、>=或用作表达式

时,这些值是不正确的

即使我得到错误,它应该显示解决方案,可能是什么问题?

我想用select来选择那些Batchofmeat温度低于3°c的供应商的电子邮件地址。

如果您试图查找温度小于3的所有记录,您可以使用以下命令。

SELECT Email 
FROM Supplier 
WHERE Supplier_ID IN (SELECT Temperature FROM Batchofmeat WHERE Supplier.Supplier_ID = Batchofmeat.Supplier_ID AND Temperature < 3 );

注意,对于大量的记录,这可能不是性能。

由于您在查询中添加了诸如:temperature <3等条件,因此可能有多个值满足此标准。因此,您必须在这里使用in操作符。

in就像一个值列表。

SELECT Email FROM Supplier 
WHERE Supplier_ID IN (SELECT Temperature FROM Batchofmeat 
WHERE Supplier.Supplier_ID =  Batchofmeat.Supplier_ID AND Temperature < 3 );

听起来你只需要exists:

select email
from supplier s
where exists (select * from BatchOfMeat b where b.temperature < 3 and b.Supplier_Id=s.Supplier_Id )

如果满足您的业务需求,可以使用avg,maxmin温度。

SELECT Email 
FROM Supplier 
WHERE 
(
SELECT avg(Temperature)
FROM Batchofmeat 
WHERE Supplier.Supplier_ID = Batchofmeat.Supplier_ID
) < 3;

话虽如此,我将这样写SQL查询:

SELECT Supplier_ID, Email, avg(Temperature)
FROM Supplier inner join Batchofmeat using (Supplier_ID)
group by Supplier_ID, Email
having avg(Temperature) < 3;

更新:

根据你的评论:我想要选择的是那些Batchofmeat温度低于3°C的供应商的电子邮件地址。-

这样做:

SELECT distinct Supplier_ID, Email
FROM Supplier inner join Batchofmeat using (Supplier_ID)
where Temperature < 3;

相关内容

  • 没有找到相关文章

最新更新