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.有没有其他有效的方法呢?
使用正确的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 JOIN从companyinfo没有任何发票的公司获取数据