SQL JOIN 多部分标识符错误

标签 sql sql-server t-sql join

我有两个表,客户 [CustomerID, Email] 和历史记录 [CustomerID, BikeID, Checkout, StationIDout, Checkin, StationIDin]。

给定客户的电子邮件,我想查询 History 表并获取包含该电子邮件对应的 CustomerID 的所有行,其中自行车已被退回 ( WHERE Checkin IS NOT NULL),按最近的 checkin 日期排序。

我尝试了以下查询,但收到错误:

"The multi-part identifier "[email protected]" could not be bound."

[email protected]存在于数据库中。我看到其他帖子解释了它是如何拼写错误或某些列被错误选择的,但我没有看到我的查询执行任何这些操作。我还缺少其他东西吗?

email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="83f7e6f0f7dce6eee2eaefc3f7e6f0f7adecf1e4" rel="noreferrer noopener nofollow">[email protected]</a>";

 sql = string.Format(@"
    SELECT BikeID, Checkout, StationIDout, Checkin, StationIDin 
    FROM History INNER JOIN 
    Customers ON Customers.CustomerID = History.CustomerID
    AND Customers.Email = {0} 
    WHERE Checkin IS NOT NULL
    ORDER BY Checkin DESC", email);

最佳答案

缺少字符串引号:

 sql = string.Format(@"
    SELECT BikeID, Checkout, StationIDout, Checkin, StationIDin 
    FROM History INNER JOIN 
    Customers ON Customers.CustomerID = History.CustomerID
    AND Customers.Email = '{0}' 
                          ^   ^
    WHERE Checkin IS NOT NULL
    ORDER BY Checkin DESC", email);

但不要使用 concat 或 format,而是使用参数

关于SQL JOIN 多部分标识符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38045309/

相关文章:

sql - 如何阻止 Postgres 将记录创建详细信息输出到终端(rails c/dev 模式)? 100 0's of "放慢了我的程序

mysql - 计算日期之间的差异

sql-server - 没有定义主键并且无法推断出有效的主键

sql - 放弃所有约束

sql - 如果使用 SUM 如何计算平均值

sql - OR 和索引创建

mysql - 任何人都可以通过汇总和排名查询来帮助我进行分组吗?

java - 当我更新 JTable 中的数据库时,我得到多个项目

SQL查询优化合并表

c# - 在一堆纬度和经度中找到西北和东南