2013-04-30 2 views
0

hello У меня есть этот запрос, я хочу, чтобы он также возвращал строки из таблицы j (jobcard), где j.articleId, j.statusId, j.hcwsId, j.gpId имеют нулевую помощь plz ?MySql query join return result with empty column

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" 
+1

ли вы имеете в виду, что 'jobcard' имеет фактические значения NULL, или вы имеете в виду, что нет ни одного совпадения для строки в других таблицах? – Barmar

+0

Я имею в виду, что я хочу, чтобы все строки из таблицы верстки, даже если они равны нулю. потому что изначально я не помещал идентификаторы в столбцы jobcard (articleid, statusid ...) ... он возвращает только строки, где эти столбцы не являются нулевыми –

+0

, чтобы быть простым, я хочу записи, где j.articleId = a.articleId и j.articleId = null от таблицы заказов –

ответ

1

Вы не получаете NULL значения для этих столбцов, потому что ваш внутренний присоединяется исключаете их - они не совпадают ни с чем в других таблицах.

Чтобы включить аннулирует, используйте OUTER JOIN:

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 
+0

THANXXXXXXXXXXXXXXXXXX он работалddd: D –

+0

Я должен hv знать это: D thanxxxx (Y) –

0

Использовать LEFT JOIN. Теперь ваш запрос работает эффективно как INNER JOIN, исключая строки, в которых нет совпадений. С LEFT JOIN вы возвращаете все строки из карточки jobcard и возвращаете NULL для столбцов из других таблиц, если они не содержат совпадающих записей (т. Е. Когда jobcard содержит 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 JOIN articles a on j.articleId=a.articleId 
    LEFT JOIN statuses s on j.statusId = s.statusId 
    LEFT JOIN hcws h j.hcwsId = h.hcwsId 
    LEFT JOIN gp g on j.gpId=g.gpId