2015-10-20 92 views
0

繼承人我查詢MySQL的左連接,GROUP BY,計數和UNION ALL

SELECT 
    fsi_courier_assignment_print_master_listing.master_listing_id, 
    fsi_master_listing.transmittal_id, 
    fsi_transmittals.product_name, 
    fsi_transmittals.transmittal_id 
FROM fsi_courier_assignment_print_master_listing 
LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing.master_listing_id = fsi_master_listing.master_listing_id 
LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id 
WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)." 
UNION ALL 
SELECT 
    fsi_courier_assignment_print_master_listing_undelivered.master_listing_id, 
    fsi_master_listing.transmittal_id, 
    fsi_transmittals.product_name, 
    fsi_transmittals.transmittal_id 
FROM fsi_courier_assignment_print_master_listing_undelivered 
LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing_undelivered.master_listing_id = fsi_master_listing.master_listing_id 
LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id 
WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)." 

fsi_courier_assignment_print_master_listing

master_listing_id dispatch_code_id 
      2     2 
      5     2 
      36    2 
      37    2 
      134    2 
      135    2 
      136    2 
      137    2 
      138    2 
      139    2 
      140    2 

fsi_courier_assignment_print_master_listing_undelivered

master_listing_id dispatch_code_id 
      1     2 

fsi_master_listing

master_listing_id transmittal_id 
      1     1 
      2     1 
      5     2 
      36    2 
      37    2 
      134    3 
      135    3 
      136    3 
      137    3 
      138    3 
      139    3 
      140    3 

fsi_transmittals

transmittal_id product_name 
     1    Name 1 
     2    Name 2 
     3    Name 3 

什麼進出口試圖做的是從fsi_courier_assignment_print_master_listingfsi_courier_assignment_print_master_listing_undelivered獲得產品的綜合結果,其中dispatch_code_id =「2」和盡數

我的願望輸出將

Product Name Product Count 
    Name 1   2 
    Name 2   3 
    Name 3   7 

在此先感謝,希望有人能幫到我..

+0

**這不可能是真的**'選擇fsi_courier_assignment_prin t_master_listing.master_listing_id, fsi_master_listing.transmittal_id, fsi_transmittals.product_name fsi_transmittals.transmittal_id'您的選擇有4列,您會得到2列結果? – lad2025

+0

我沒有把其他cols –

+1

我認爲@ lad2025是建議使用'UNION'而不是'UNION ALL'的東西。但是,你能否更新你的輸出來顯示列?這是我相信的混亂之源。 –

回答

0
SELECT product_name, COUNT(*) AS Product_Count 
FROM 
(SELECT 
    fsi_courier_assignment_print_master_listing.master_listing_id, 
    fsi_master_listing.transmittal_id, 
    fsi_transmittals.product_name 
FROM fsi_courier_assignment_print_master_listing 
LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing.master_listing_id = fsi_master_listing.master_listing_id 
LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id 
WHERE dispatch_code_id=2 
UNION ALL 
SELECT 
    fsi_courier_assignment_print_master_listing_undelivered.master_listing_id, 
    fsi_master_listing.transmittal_id, 
    fsi_transmittals.product_name 
FROM fsi_courier_assignment_print_master_listing_undelivered 
LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing_undelivered.master_listing_id = fsi_master_listing.master_listing_id 
LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id 
WHERE dispatch_code_id=2 
) AS sub 
GROUP BY product_name; 

LiveDemo

輸出:

╔══════════════╦═══════════════╗ 
║ product_name ║ Product_Count ║ 
╠══════════════╬═══════════════╣ 
║ Name 1  ║    2 ║ 
║ Name 2  ║    3 ║ 
║ Name 3  ║    7 ║ 
╚══════════════╩═══════════════╝ 
+0

@JoelEnanodJr解決了 – lad2025

0
SELECT 
    fsi_courier_assignment_print_master_listing.master_listing_id, 
    fsi_master_listing.transmittal_id, 
    fsi_transmittals.product_name, 
    fsi_transmittals.transmittal_id 
FROM fsi_courier_assignment_print_master_listing 
LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing.master_listing_id = fsi_master_listing.master_listing_id 
LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id 
WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)." 
GROUP BY fsi_transmittals.transmittal_id 
UNION ALL 
SELECT 
    fsi_courier_assignment_print_master_listing_undelivered.master_listing_id, 
    fsi_master_listing.transmittal_id, 
    fsi_transmittals.product_name, 
    fsi_transmittals.transmittal_id 
FROM fsi_courier_assignment_print_master_listing_undelivered 
LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing_undelivered.master_listing_id = fsi_master_listing.master_listing_id 
LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id 
WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)." 
GROUP BY fsi_transmittals.product_name 

OR

SELECT fsi_transmittals.product_name, SUM(fsi_transmittals.transmittal_id) AS transmittal_id 
FROM (SELECT 
    fsi_courier_assignment_print_master_listing.master_listing_id, 
    fsi_master_listing.transmittal_id, 
    fsi_transmittals.product_name, 
    fsi_transmittals.transmittal_id 
FROM fsi_courier_assignment_print_master_listing 
LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing.master_listing_id = fsi_master_listing.master_listing_id 
LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id 
WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)." 
GROUP BY fsi_transmittals.transmittal_id 
UNION ALL 
SELECT 
    fsi_courier_assignment_print_master_listing_undelivered.master_listing_id, 
    fsi_master_listing.transmittal_id, 
    fsi_transmittals.product_name, 
    fsi_transmittals.transmittal_id 
FROM fsi_courier_assignment_print_master_listing_undelivered 
LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing_undelivered.master_listing_id = fsi_master_listing.master_listing_id 
LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id 
WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id).") 
GROUP BY fsi_transmittals.product_name 
+0

我認爲它的工作很好。 –

+0

你也介意告訴我們這個查詢有什麼不同嗎? –

+0

第一個查詢不起作用,我仍然得到相同的結果。第二個是錯誤 –