我对func "on“有意见。这是一个查询:
检索在公寓式房屋中至少有3名保姆的爱犬者的姓名。
CREATE TABLE DogLover (
DogLoverID INT PRIMARY KEY,
name VARCHAR(50),
DailyWage INT,
phone INT,
city VARCHAR(50));
CREATE TABLE House (
HouseID INT PRIMARY KEY,
HouseType VARCHAR(50),
no_of_dogs INT,
max_cancel_notice INT);
CREATE TABLE DogLoverShift (
DogLoverID INT,
HouseID INT PRIMARY KEY,
StartDate DATE,
EndDate DATE,
FOREIGN KEY (DogLoverID) REFERENCES DogLover(DogLoverID),
FOREIGN KEY (HouseID) REFERENCES House(HouseID));
我尝试的查询是:
SELECT *
FROM DogLoverShift inner join DogLover AS newTable
ON doglover.DogLoverID = doglovershift.DogLoverID
错误:
错误代码: 1054。'on子句‘中未知列'doglover.DogLoverID’
编辑:在我看到这里所有的好帮助之后,我更改了查询:
SELECT *
FROM DogLoverShift inner join DogLover inner join House AS newTable ON newtable.DogLoverID=DogLoverShift.DogLoverID AND newtable.HouseID=house.HouseID;
而错误是:
错误代码: 1054。'on子句‘中未知列'newTable.DogLoverID’
编辑2: (希望最后一次编辑。)现在我使用这个代码( thansk到'Arulkumar‘!)
SELECT *
FROM DogLoverShift AS DLS
INNER JOIN DogLover AS DG ON DG.DogLoverID = DLS.DogLoverID
INNER JOIN House AS HS ON HS.HouseID = DLS.HouseID
现在我如何检查:“在公寓式房屋中至少有3名保姆”?我知道我需要分组,并在哪里,但我不知道如何:
发布于 2019-05-23 15:37:11
您当前的语法已关闭,因为一旦将DogLover
表别名为newTable
,您就失去了在ON
子句中再次引用DogLover
的能力。但是,当前的查询与您需要的内容相差甚远,因此这里有一个正确的方法来处理您的查询:
SELECT
dl.name
FROM DogLover dl
INNER JOIN DogLoverShift dls
ON dl.DogLoverID = dls.DogLoverID
INNER JOIN House h
ON dls.HouseID = h.HouseID
GROUP BY
dl.name
HAVING
SUM(h.HouseType = 'Apartment') >= 3;
发布于 2019-05-23 15:40:00
我认为表名newTable
的问题。您可以使用:
SELECT *
FROM DogLoverShift
inner join DogLover AS newTable ON newTable.DogLoverID = DogLoverShift.DogLoverID
或直接使用表名。
SELECT *
FROM DogLoverShift
inner join DogLover ON DogLover.DogLoverID = DogLoverShift.DogLoverID
根据您的注释,要连接三个表,请使用以下查询:
SELECT *
FROM DogLoverShift AS DLS
INNER JOIN DogLover AS DG ON DG.DogLoverID = DLS.DogLoverID
INNER JOIN House AS HS ON HS.HouseID = DLS.HouseID
https://stackoverflow.com/questions/56278631
复制相似问题