Sql 使用外键从另一个表查询表列

Sql 使用外键从另一个表查询表列,sql,sql-server,Sql,Sql Server,当我有订单id时,我试图在订单表中获取客户电子邮件和电话号码 模式的结构如下所示,订单表中有客户id: 订单 id date item refid customerFk id name email phonenumber 客户 id date item refid customerFk id name email phonenumber 当我尝试使用从SQL Server中的orderrefId检索客户电话号码或电子邮件表时 select from order a where a.c

当我有订单id时,我试图在
订单
表中获取客户电子邮件和电话号码

模式的结构如下所示,订单表中有客户id:

订单

id
date
item
refid
customerFk
id
name
email
phonenumber
客户

id
date
item
refid
customerFk
id
name
email
phonenumber
当我尝试使用从SQL Server中的
order
refId检索客户电话号码或电子邮件表时

select 
from order a 
where a.custtomerFK.email
我得到这个错误

无法对bigint调用方法

请协助进行正确的查询。

正确的语法是:

选择o.date、o.item、o.refid c.姓名、c.电子邮件、c.电话号码
从命令
在o.customerFk=c.id上左加入客户c
按订单日期、订单项、c.名称订购

如果每个订单都有客户,则可以使用此选项

SELECT orders.date, orders.item, orders.refid 
    , customers.Name, customers.email, customers.phonenumber
FROM orders
INNER JOIN customers ON orders.customerFk = customers.id

请根据以下建议答案的评论进行研究,通过添加一些样本数据和预期结果数据,这个问题将得到改善。我通常避免
内部连接
,即使人们希望有一个关系,也是为了发现如果不使用
左连接
,可以隐藏的错误。也就是说,在本例中,如果应用程序以某种方式创建了一个没有客户记录的订单(可能有“原因”当时有人认为这是一个好主意),那么该记录将消失,而不是与
NULL
客户一起出现。@daShier这就是为什么我说“如果每个订单都有客户”一开始我确实看到了你的资格赛。这就是为什么我说“即使一个人希望有一段感情”。我可以看到一个订单处理查询的
内部联接的例子,您不希望显示“不良记录”,因为没有客户而无法处理。但在这种情况下,我会设置一个“错误报告”,显示
WHERE IS NULL customers.id
丢失的记录。两者的结合将是稳健的,但很可能超出OP的应用范围@达希尔。名为
customerFK
的列具有有效的
customer.id
值是完全合理的。外键就是这样工作的。在某些情况下,不必要地使用
左连接
会减慢查询速度。customerfk不等于c的情况如何。id@Blaze-这将是一种“正常”情况。您可以有许多没有当前订单的客户。没有理由报告他们,但我有点想知道reasons@Blaze然后将
左连接
替换为
完全外部连接
@Blaze,当然“更好”的解决方案是单独查询没有客户的订单(见我上面的评论)和没有订单的客户。下面是SQL
联接类型的一个很好的参考: