如果第二行中不存在行,则MySql从两个表中选择

时间:2017-02-11 06:12:39

标签: mysql mysqli

我有两个表table 1和table 2 table 2包含表1的id

我想显示表1的所有字段,其中表2中的2列具有表1的id,如果表2没有表1的记录(没有表1的id)结果将是表1的内容,其中2列将为空 这是我使用的查询

select *
from tbl_marketing
right join tbl_phonecall on tbl_marketing.db_maid=tbl_phonecall.db_mid 
where tbl_marketing.db_status!='Deal Done' and tbl_marketing.db_status!='Refused' and tbl_marketing.db_status!='Not Interested' order by tbl_marketing.db_date desc,tbl_phonecall.db_nextdate desc

但是这个查询并没有给我想要的结果

如果我在表1中没有关于表1中某一行的信息,则该行不会出现在我的结果中

我该如何解决这个问题?!

2017-02-10 12:46:01 vv  ddd  Answered 2017-01-01 00:00:00   2017-02-24 00:00:00

这是第一张表中的数据:

2017-02-10 12:46:01 vv  ddd  Answered

这是第二张表中的数据:

2017-01-01 00:00:00 2017-02-24 00:00:00

如果第二个表没有frist表的数据,那么第一个表中的数据不会出现,如果不是就像上面那样 我想如果在第二个表中我没有第一个表的数据,结果就像那样

2017-02-10 12:46:01 vv  ddd  Answered

最后2列为空 tbl_marketing enter image description here

tbl_phonecall enter image description here

结果将是tbl_marketing中的所有字段而不重复,如果在tbl_phonecall中有两行或更多行,并且如果我在tbl_phonecall中没有行为tbl_marketing中的字段,那么它将显示db_due和db_nextdate的空值

1 个答案:

答案 0 :(得分:0)

使用左连接(我假设表1是tbl_marketing)..


    SELECT 
      tbl_marketing.* , tbl_phonecall.db_due, tbl_phonecall.db_nextdate
    FROM
      tbl_marketing 
      LEFT JOIN (SELECT db_mid, max(db_due) db_due, max(db_nextdate) db_nextdate FROM tbl_phonecall group by db_mid) tbl_phonecall
        ON tbl_marketing.db_maid = tbl_phonecall.db_mid 
    WHERE tbl_marketing.db_status != 'Deal Done'
      AND tbl_marketing.db_status != 'Refused'
      AND tbl_marketing.db_status != 'Not Interested' 
    ORDER BY tbl_marketing.db_date DESC,
      tbl_phonecall.db_nextdate DESC;