Join ile != ve <> karşılaştırma operatörleri kullanırken benim sık karşılaştığım sorunlardan biri. Dikkatinizden kaçıyorsa çözmek için uzun süre çaba harcayabilirsiniz.
Çözümü basit aslında. Karşılaştırma yapılacak Field’a varsayılan (dafault) değer atamak. Eğer kıyaslama yapılan alan boşsa (NULL) bu sorun oluşuyor.
İncelemek isteyenler olursa diye karşılaştığım örneği direkt ekledim.
Aşağıdaki örnekte purchase_receivings tablosu ile purchase_transactions tablolarını birleşiyor. purchase_transactions tablosunda status_transaction durumu cancelled değilse son row birleşiyor. status_transaction alanı NULL ise field cancelled değilse bile birleşme gerçekleşmiyor.
SELECT * FROM `purchase_receivings` JOIN `stock_orders` ON `stock_orders`.`id` = `purchase_receivings`.`order_item_id` JOIN `purchase_orders` ON `purchase_orders`.`id` = `purchase_receivings`.`purchase_order_id` LEFT JOIN `purchase_transactions` ON `purchase_transactions`.`id` = ( SELECT MAX(PT2.id) FROM purchase_transactions AS PT2 WHERE PT2.purchase_receiving_id = purchase_receivings.id AND `PT2`.`status_transaction` <> 'cancelled' AND `PT2`.`deleted` IS NULL) WHERE `purchase_receivings`.`deleted` IS NULL ORDER BY `purchase_receivings`.`id` DESC