2015-10-20 94 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

第一个查询不起作用,我仍然得到相同的结果。第二个是错误 –