以下是我的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的值, 我仍然想要选择没有purchase_userid的行和那些带有purchase_userid
的行感谢您的帮助!!
答案 0 :(得分: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?
答案 1 :(得分:1)
当您需要的是LEFT JOIN操作时,您在表之间使用了旧的语法来进行INNER 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
这对您更有效,因为您使用的JOIN类型会抑制a
表格中b
或c
表格中未匹配的记录。此LEFT JOIN将保留a
表记录,并将NULL值放在要求其他两个数据的位置。