MYSQL LEFT JOIN 3表(第一个表返回空值)

时间:2018-02-15 16:59:06

标签: php mysql

在我离开表B后,我无法弄清楚为什么表A返回空值。它应该是3个表但是现在,我只是让两个表工作。

Table A
IUEID  DATE  MONTH  DATAA
4444   01    JAN    150
4444   02    JAN    98
4444   03    JAN    78
4444   04    JAN    55 

TABLE B
IUEID  DATE   MONTH  DATAB
4444   02     JAN    CORN
4444   03     JAN    GRAPES

SELECT *, TABLEB.DATAB
FROM TABLEA
LEFT JOIN TABLEB
ON TABLEB.IUEID = TABLEA.IUEID
AND TABLEB.DATE = TABLEA.DATE
GROUP BY TABLEA.DATE

OUTPUT:
IUEUD     DATE     DATAA      DATAB
(empty)  (empty)   150       (emtpy)
4444     02        98        CORN
4444     03        78        GRAPES
(empty)  (empty)   55        (empty)

4 个答案:

答案 0 :(得分:1)

这对所有记录都不起作用,因为并非表B中的所有记录都具有与表A中匹配的日期值,因此它没有任何内容可以加入。因此,它显示表A中的值,并使表B列为空。这是左连接的典型特征。如果要显示它们仅出现在两个表中的记录,则应使用内部连接。

查看使用不同的joins 来了解它们如何帮助您更好地理解。

答案 1 :(得分:0)

如果您在选择中指定查询应该从哪个表中提取,则应该按预期工作。

SELECT DISTINCT A.IUEUD, A.DATE, A.DATAA, B.DATAB
FROM TABLEA A
LEFT JOIN TABLEB B
   ON TABLEB.IUEID = TABLEA.IUEID
   AND TABLEB.DATE = TABLEA.DATE

答案 2 :(得分:0)

LEFT JOIN将显示TABLEA中的所有值,然后将与TABLEB中的值匹配。如果TABLEB中没有相关数据,则显示为null。

与Juakali92一样,建议仅使用JOIN

答案 3 :(得分:0)

嗨感谢您分享您的想法...我能够通过添加..

来解决问题



Used Join and Inner Join (It removes the result that doesn't match Table B) Left Join displays the result but IUEID and DATE are empty so I add the following IFNULL

SELECT a.IUEID, a.DATE, b.DATAB
IFNULL(a.IUEID,'0') as IUEIDa,
IFNULL(a.DATE,'0') as DATEa,
FROM TABLEA
LEFT JOIN TABLEB
ON TABLEB.IUEID = TABLEA.IUEID
AND TABLEB.DATE = TABLEA.DATE
ORDER BY TABLEA.DATE

Thanks for all your help.