MySql查询连接返回结果,列为空
您好,我有这个查询,我希望它还返回表j(工作卡)中的行,其中j.articleId、j.statusId、j.hcwsId、j.gpId为null。有任何帮助吗MySql查询连接返回结果,列为空,mysql,join,Mysql,Join,您好,我有这个查询,我希望它还返回表j(工作卡)中的行,其中j.articleId、j.statusId、j.hcwsId、j.gpId为null。有任何帮助吗 SELECT jobcardId,createDateTime,jobNo,companyId, customerId,serialNo,rsvdDate,model,promiseDate, readyDate,deliveryDate
SELECT jobcardId,createDateTime,jobNo,companyId,
customerId,serialNo,rsvdDate,model,promiseDate,
readyDate,deliveryDate,cashMemoNo,dealer,
dop,status,warrantyCardno,batchNo,
employeeId,hcws,gp,cdId,
collectionDate,remarks,article
FROM jobcard j, articles a, statuses s, hcws h, gp g
WHERE j.articleId=a.articleId AND
j.statusId = s.statusId AND
j.hcwsId = h.hcwsId AND
j.gpId=g.gpId"
使用
左连接
。您现在的查询有效地充当了一个内部联接
,排除了不匹配的行。使用LEFT JOIN,您将返回jobcard中的所有行,如果其他表中的列不包含匹配的记录(即jobcard包含该列的NULL
),则将这些列返回NULL
这些列没有得到
NULL
值,因为内部联接将它们排除在外-它们与其他表中的任何内容都不匹配
要包含空值,请使用外部联接:
SELECT jobcardId,createDateTime,jobNo,companyId,
customerId,serialNo,rsvdDate,model,promiseDate,
readyDate,deliveryDate,cashMemoNo,dealer,
dop,status,warrantyCardno,batchNo,
employeeId,hcws,gp,cdId,
collectionDate,remarks,article
FROM jobcard j
LEFT OUTER JOIN articles a ON j.articleId=a.articleId
LEFT OUTER JOIN statuses s ON j.statusId = s.statusId
LEFT OUTER JOIN hcws h ON j.hcwsId = h.hcwsId
LEFT OUTER JOIN gp g ON j.gpId=g.gpId
您的意思是
jobcard
具有实际的空值,还是其他表中的行没有匹配项?我的意思是,我想要jobcard表中的所有行,即使它们为空。因为最初我不把ID放在工作卡列中(articleid,statusid…)。。。它只返回这些列不为null的行要简单,我需要jobcard表中j.articleId=a.articleId和j.articleId=null的记录请尝试阅读关于左联接的信息。这里:@RelevantUsername如果你不使用左连接,它将对文章中的每一行执行叉积,这可能不是他想要的。我应该知道这一点:D thanxxxx(Y)
SELECT jobcardId,createDateTime,jobNo,companyId,
customerId,serialNo,rsvdDate,model,promiseDate,
readyDate,deliveryDate,cashMemoNo,dealer,
dop,status,warrantyCardno,batchNo,
employeeId,hcws,gp,cdId,
collectionDate,remarks,article
FROM jobcard j
LEFT OUTER JOIN articles a ON j.articleId=a.articleId
LEFT OUTER JOIN statuses s ON j.statusId = s.statusId
LEFT OUTER JOIN hcws h ON j.hcwsId = h.hcwsId
LEFT OUTER JOIN gp g ON j.gpId=g.gpId