2014-09-10 81 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