Mysql查询 - 显示在少数表中找到匹配并显示空行的行

时间:2013-02-06 08:44:48

标签: php mysql

我目前正在制作一张桌子,这张桌子上有例如客户编号,这个客户编号可以在另外两张表中找到,我想提取有关这个号码的详细信息(姓名,电话技术)。
所以我的查询只显示在某些CODE编号的查询中匹配的客户,这是因为我使用INNER Join。
我想显示其他表中没有匹配的行。它们位于我选择的表中,但没有代码编号。 (就像我要显示的空行)
下一个查询将更容易理解

$sql="SELECT $tbl_name.*,customers.fname,eventcodes.DISCODE,eventcodes.AREA
                FROM $tbl_name
                    INNER JOIN customers
                        INNER JOIN eventcodes
                                ON $tbl_name.Ccode=eventcodes.MokedCcode AND eventcodes.Ccode=customers.Ccode  AND $tbl_name.CODE=eventcodes.CODE
                                                                ORDER By `id` DESC
                                                                        LIMIT $start, $limit";

正如你可以在$ tbl_name上看到我要显示的所有行,这个查询有效,但它只向我显示符合条件的行,我想显示表中所有不显示的行有CODE,但我可以从customers表中提取他们的名字,例如(fname),因为我有他们的代码(客户编号)。
谢谢!

3 个答案:

答案 0 :(得分:0)

试试这个

SELECT $tbl_name.*,customers.fname,eventcodes.DISCODE,eventcodes.AREA
                FROM $tbl_name
                    LEFT JOIN customers
                        LEFT JOIN eventcodes
                                ON $tbl_name.Ccode=eventcodes.MokedCcode AND eventcodes.Ccode=customers.Ccode  AND $tbl_name.CODE=eventcodes.CODE
                                                                ORDER By `id` DESC
                                                                        LIMIT $start, $limit

答案 1 :(得分:0)

使用LEFT JOIN代替INNER JOIN

答案 2 :(得分:0)

使用LEFT JOIN并注意加入条件:

SELECT 
  t.*,
  c.fname,
  e.DISCODE,
  e.AREA
FROM $tbl_name       AS t
LEFT JOIN customers  AS c ON t.Ccode = c.Ccode
LEFT JOIN eventcodes AS e ON t.Ccode = e.MokedCcode 
ORDER By `id` DESC
LIMIT $start, $limit";

请注意:我已将条件customers.Ccode = $tablename.Ccode移至第一个联接,并删除了条件$tbl_name.CODE=eventcodes.CODE,因为前两个联接将确保该条件。