首页 > 解决方案 > 加入同一张表,忽略空值

问题描述

我有一张这样的桌子

id userid    game   date_t       hdigit   inside  outside
1  user101    xy     02-09-2017    1       10
2  user101    xy     02-09-2017    1               40
3  user101    xx     02-09-2017    2       40
4  user101    xx     02-09-2017    3               90  

我想要显示数据

id userid    game   date_t     hdigit inside outside
1  user101    xy    02-09-2017  1       10     40
3  user101    xx    02-09-2017  2       40
4  user101    xx    02-09-2017  3              90 

我试过这个

SELECT h.userid,h.game,h.date_t,h.hdigit,h.inside,htwo.outside 
 FROM `hadap_game` AS h JOIN hadap_game AS htwo WHERE h.userid=:user
 AND htwo.userid=:uer AND h.hdigit=htwo.hdigit AND h.game=htwo.game 
 AND h.inside IS NOT NULL AND htwo.outside IS NOT NULL

它正在打印上面的东西,但我也想打印具有空值的行

标签: phpmysqlsql

解决方案


我认为您可能只需使用GROUP BY?

SELECT 
    h.userid,
    h.game,
    h.date_t,
    h.hdigit,
    MAX(IFNULL(h.inside, htwo.inside)) AS inside,
    MAX(IFNULL(h.outside, htwo.outside)) AS outside
 FROM 
    hadap_game AS h 
    LEFT JOIN hadap_game AS htwo ON htwo.userid = h.userid AND htwo.hdigit = h.hdigit AND htwo.game = h.game AND htwo.id <> h.id
WHERE 
    h.userid = :user
GROUP BY
    h.userid,
    h.game,
    h.date_t,
    h.hdigit;

这做了一些您可能不需要/不想要的其他事情,但它与您的原始查询基本相同,除了它在每个唯一引用没有两行时起作用。


推荐阅读