SQL从3个表中选择数据

wis*_*568 1 sql sql-server sql-server-2014

我正在为本地企业开发一个C#应用程序.我想从一个SQL Server 2014数据库的3个表选择数据,即companyinfo,invmain,invtran.

Companyinfo存储业务名称,invmain具有销售发票编号和日期信息,同时invtran具有发票交易.

我正在使用这样的SELECT语句:

SELECT 
    companyinfo.name,    
    invmain.invno, invmain.date, invtrans.itemid, invtrans.unitprice 
FROM 
    companyinfo, invmain, invtrans
WHERE 
    companyinfo.Id = 1 
    AND invmain.invno = 13 
    AND invtrans.invnumber = 13
Run Code Online (Sandbox Code Playgroud)

但是如果其中一个表没有数据,则返回null.有没有其他有效的方法呢?

mar*_*c_s 5

使用正确的ANSI/SQL JOIN语法,如下所示:

SELECT 
    ci.name,    
    invmain.invno, invmain.date, 
    invtrans.itemid, invtrans.unitprice 
FROM 
    companyinfo ci, 
INNER JOIN
    invmain m ON ci.companyId = m.companyId
INNER JOIN
    invtrans it ON it.invo = m.invno
WHERE 
    companyinfo.Id = 1 
Run Code Online (Sandbox Code Playgroud)

并且您需要在表之间定义JOIN条件以建立"链接".我选择了INNER JOIN哪个只返回两个表中存在的行,基于ON关键字后面定义的匹配条件.

如果您想从中选择companyinfo没有相应发票的行,您也可以使用LEFT OUTER JOIN而不是INNER JOINcompanyinfo没有任何发票的公司获取数据