我有一个在数据库中使用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
,max
或min
温度。
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;