我正在尝试选择所有的小屋'从我的表中未在特定日期预订。我对SQL很陌生,据我所知,我的问题是我无法访问“已预订周刊”表,因为我正在选择我的小屋#-table; -table。我尝试过使用INNER JOIN,但我无法弄清楚如何使它工作。
我在论坛上搜索了类似的错误,但似乎没有一个真的符合我的目的。
它告诉我多部分标识符已经预订了Weeks.cabinNr'无法绑定
CREATE FUNCTION showAllUnbooked (@weekToCheck integer)
RETURNS Cabin
AS
BEGIN
RETURN
(
SELECT * FROM Cabin WHERE Cabin.CNr = bookedWeeks.CabinNr AND @weekToCheck != bookedWeeks.weekNr
)
END
GO
我会在这里得到一些帮助。 感谢
答案 0 :(得分:1)
一些小问题:bookedWeeks
子句中需要from
,但您还需要声明函数返回的内容有所不同:
create function showAllUnbooked ( @weekToCheck integer ) returns table as
return
(
select
* --> should not use * - explicitly list columns instead
from
Cabin
left outer join
BookedWeeks
on
Cabin.CNr = BookedWeeks.CabinNr
where
BookedWeeks.WeekNr = @weekToCheck
and
BookedWeeks.CabinNr is null
)
左连接意味着您将获得"所有小屋"最初,但会排除BookedWeeks
中不匹配的记录。此外,它只检查指定的周 - 所以它可能会更有效率。最后,不使用*来识别查询返回的列是个好主意。这主要是维护问题,以考虑可能影响此功能的更改。
答案 1 :(得分:0)
试试这个:
CREATE FUNCTION showAllUnbooked (@weekToCheck integer)
RETURNS Cabin
AS
BEGIN
RETURN
(
SELECT *
FROM Cabin
JOIN bookedWeeks on Cabin.CNr = bookedWeeks.CabinNr
AND @weekToCheck != bookedWeeks.weekNr
)
END
Go
答案 2 :(得分:0)
您可以采用两种不同的路径。 使用join:
SELECT *
FROM Cabin
JOIN bookedWeeks on Cabin.CNr = bookedWeeks.CabinNr AND @weekToCheck != bookedWeeks.weekNr
或者使用你的where子句从两个表中选择记录(几乎是你的查询,但是将dailyWeeks添加到from。
SELECT *
FROM Cabin, bookedWeeks
WHERE Cabin.CNr = bookedWeeks.CabinNr AND @weekToCheck != bookedWeeks.weekNr
联接可能会表现得更好,但两个查询都会返回相同的结果。