Mysql左连接无法返回第一个表中的所有值

时间:2014-11-25 11:03:22

标签: mysql group-by left-join

我有两个名为table1table2的表。 table2可能包含来自table1的元素。我想显示table2的所有结果,如果table1status可用,则显示价格1.如果table1中没有产品匹配,{{1} }为0,需要将价格返回为0。

status

table1

id pname item_code price status 1 product1 abcd 200 1 2 product2 pqrs 500 1 3 product3 wxyz 425 1 4 product5 mnop 100 0 如下

table2

我尝试过以下查询

id  item_code   

10  efgh
11  abcd
12  pqrs
13  mnop

但它返回table1和table2中状态为1的常用值,但如果SELECT `t2`.`id`, `t2`.`item_code`, `t1`.`price`,`t1`.`pname`, COUNT(t2.item_code) AS sellers FROM (`table2` as t2) LEFT JOIN `table1` as t1 ON `t1`.`item_code` = `t2`.`item_code` WHERE `t1`.`status` = 1 GROUP BY `t2`.`item_code` 中的table2table1 0中没有任何匹配项,则需要status的所有记录,其价格为0 1}}。

预期输出

table1

请帮助。

谢谢,

3 个答案:

答案 0 :(得分:0)

尝试以下查询:

   SELECT `t2`.`id`, `t2`.`item_code`, `t1`.`price`,`t1`.`pname`, COUNT(t2.item_code) AS sellers FROM (`table2` as t2) LEFT JOIN (select * from table1 where status = 1)t1 ON `t1`.`item_code` = `t2`.`item_code`  GROUP BY `t2`.`item_code`

答案 1 :(得分:0)

不确定您当前的查询是count还是group by但是您可以执行以下操作

select
t2.id,
t2.item_code,
case 
  when t1.status = 1 then t1.price
  else 0
end as price
from table2 t2
left join table1 t1 on t1.item_code = t2.item_code

现在请注意,如果table1table2中有多个匹配值,那么我们可能需要对数据进行分组。

答案 2 :(得分:0)

将检查左连接表的WHERE子句的一部分移动到ON子句

SELECT `t2`.`id`, `t2`.`item_code`, COALESCE(`t1`.`price`, 0),`t1`.`pname`, COUNT(t2.item_code) AS sellers 
FROM (`table2` as t2) 
LEFT JOIN `table1` as t1 
ON `t1`.`item_code` = `t2`.`item_code` 
AND`t1`.`status` = 1 
GROUP BY `t2`.`item_code`