2013-09-17 4 views
0

Я использую следующий запрос, чтобы получить информацию о счете. Так что мне нужно получить информацию о счете, даже если клиент не зарегистрирован для счета. Таким образом, в этом случае внешний ключ cusidfk в таблице счетов-фактур равен нулю. Итак, как я могу получить набор результатов? как я могу показать null для клиента в том же наборе результатов?Как получить результат, даже если внешний ключ равен нулю?

SELECT invoice.invno,invoice.invdate,invoice.invtime,customer.bizname,invoice.addedby,item.nameinsin,invoicedetails.price,invoicedetails.soldprice,invoicedetails.qty,invoicedetails.subtotal,invoicedetails.total,payment.pamt,invoice.tot 
FROM invoice, invoicedetails, item, customer, payment 
WHERE invoice.invno=invoicedetails.invnofk 
    AND invoicedetails.itemfkcode=item.itemcode 
    AND customer.cusid=invoice.cusidfk 
    AND invoicedetails.invnofk='0000000000005' 
    AND invoice.invno=payment.invfkno 
+0

'... AND (customer.cusid = invoice.cusidfk ИЛИ invoice.cusidfk IS NULL) AND ...'? Кстати, вы должны были сказать/помечены с помощью СУБД, которую вы используете ... – CBroe

+0

CBroe: Я использую сервер MySQL ... не могли бы вы объяснить, как я могу заставить этот запрос работать, даже если внешний ключ равен нулю? – user2765079

+0

Разве я просто не пытался ...? – CBroe

ответ

3

Я рекомендую использовать JOIN и LEFT JOIN, а не неявное присоединение.

SELECT ... 
FROM invoice 
JOIN invoicedetails ON invoice.invno = invoicedetails.invnofk 
JOIN item ON invoicedetails.itemfkcode = item.itemcode 
JOIN payment ON invoice.invno = payment.invfkno 
LEFT JOIN customer ON customer.cusid = invoice.cusidfk 
WHERE invoicedetails.invnofk = '0000000000005' 

С LEFT JOIN все customer поля будут NULL, если запись не существует.

+0

Dukeling ... Большое спасибо. он работал ..... :) – user2765079

+0

@ user2765079 вы можете оценить ответ и выразить свою благодарность, приняв ответ Дюкелинга. –

+0

@ Рене: конечно :) – user2765079

Смежные вопросы