2014-09-10 78 views
0

下面是我的sql语句SQL显示,即使空记录

SELECT a.purchase_id, 
     b.username, 
     a.purchase_packageid, 
     a.purchase_tradelimit, 
     a.purchase_pincode, 
     a.purchase_datetime, 
     c.packages_name , 
    FROM purchase a, 
     accounts b, 
     packages c 
WHERE a.purchase_userid=b.UserId 
    AND c.packages_id=a.purchase_packageid 

基本上这个问题是我得到了3个表

Accounts 
Purchase 
Packages 

主要表是购买,在表内有purchase_userid,这我需要使用它从表帐户

因此,现在的问题是我得到的行,其中purchase_userid是空白的,是导致其空白,它不会将其记录归为空。

,显示在此SQL语句中的唯一记录是只有那些purchase_userid,

至于purchase_userid值将在稍后填补了我的web应用程序, 我还是要选择不purchase_userid和那些与行purchase_userid

感谢您的帮助!

回答

1

您使用的是带点儿怀旧语法INNER你的表之间的连接,当你需要的是LEFT JOIN操作。试试这个:

SELECT a.purchase_id, 
      b.username, 
      a.purchase_packageid, 
      a.purchase_tradelimit, 
      a.purchase_pincode, 
      a.purchase_datetime, 
      c.packages_name 
    FROM purchase AS a 
LEFT JOIN accounts AS b ON a.purchase_userid = b.UserId 
LEFT JOIN packages AS c ON a.purchase_packageid = c.packages_id 

本工程为您更好,因为那种你一起的使用从a表禁止显示的记录,当他们在你的bc表中不匹配。这个LEFT JOIN将离开a表记录,并且在你要求另外两个数据的地方放置NULL值。

2

即使没有在帐户中找到匹配的记录,您仍需要使用左连接来加载采购中的所有记录。

SELECT a.purchase_id, b.username, a.purchase_packageid, a.purchase_tradelimit, a.purchase_pincode, a.purchase_datetime, c.packages_name 
FROM purchase a LEFT JOIN accounts b 
ON a.purchase_userid=b.UserId 
JOIN packages c 
ON c.packages_id=a.purchase_packageid 

这篇文章解释了不同种类的加入还算不错:What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?

+0

+1只是这:) – 2014-09-10 23:43:35