sql错误:列名称不明确或语法错误

stszievb  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(263)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

10个月前关门了。
改进这个问题
试图改变我的代码很多次,需要帮助这些错误,请!结果:不明确的列名:main.guides.guides\u id

SELECT * 
FROM Guides 
INNER JOIN Guides ON Guides_Countries.Guide_ID = Guides_Countries.Guide_ID
INNER JOIN Countries ON Countries.Country_ID = Guides_Countries.Country_ID
INNER JOIN Guides_Languages ON Guides.Guide_ID = Guides_Languages.Guide_ID
INNER JOIN Languages ON Languages.Language_ID = Guides_Languages.Language_ID
WHERE Countries.Name="Kazakhstan" AND (Languages.Name="German" OR Languages.Name="English") AND Guides.Guide_ID NOT IN 
(SELECT Guide_ID
    FROM GuidesUnavailableDates
    INNER JOIN GuidesUnavailableDates ON GuidesUnavailableDates.UnDate_G_ID=Guides_UnDate.UnDate_G_ID
    WHERE (Start_date<="21/06/2020" and End_date>="21/06/2020")
    OR (Start_date<="30/06/2020" and End_date>="30/06/2020")
    OR (Start_date>="21/06/2020" and End_date<="30/06/2020")
    )
;
rsaldnfx

rsaldnfx1#

有多个表名在列表中多次出现 FROM 条款。这就是你的问题所在。我想你想要:

SELECT * 
FROM Guides g JOIN
     Guides_Countries gc
     ON gc.Guide_ID = g.Guide_ID JOIN
     Countries c
     ON c.Country_ID = gc.Country_ID JOIN
     Guides_Languages gl
     ON g.Guide_ID = gl.Guide_ID JOIN
     Languages l
     ON l.Language_ID = gl.Language_ID
WHERE c.Name = 'Kazakhstan' AND
      l.Name IN ('German', 'English') AND 
      g.Guide_ID NOT IN (SELECT gud.Guide_ID
                         FROM GuidesUnavailableDates gud
                         WHERE gud.Start_date <= '2020-06-30' AND
                               gud.End_date >= '2020-06-21'
                        );

笔记: Guide_Countries 不在你的房间里 FROM 尽管列出 Guides 有两次。 IN 比多重的要简单得多 OR s。
所有列都是限定的,因此很清楚它们来自哪个表。
所有表都有简单的表别名,即表名的缩写。
不需要一个 JOIN 在子查询中。
使用格式良好的日期。
我猜奇怪的日期逻辑是为了找到一个重叠的时间段,所以我简化了逻辑(您还没有解释逻辑,因此这只是猜测,您的原始代码没有意义。)
我强烈建议使用 NOT EXISTS 使用子查询而不是 NOT IN . 但是,我没有更改这里的代码(主要是因为我不能真正知道子查询应该做什么)。

相关问题