0

我目前正在处理一个表,该表包含例如客户编号,该客户编号位于另外两个表中,我想提取有关该编号的详细信息(姓名,电话技术)。
所以我的查询只显示在某个代码号的查询中匹配的客户,这是因为我正在使用 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 的所有行,但我可以从客户表中提取他们的名字,例如(fname),因为我有他们的代码(客户编号)。
谢谢!

4

3 回答 3

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
于 2013-02-06T08:49:42.693 回答
0

使用LEFT JOINinsted ofINNER JOIN

于 2013-02-06T08:50:23.810 回答
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,因为前两个连接将确保该条件。

于 2013-02-06T09:00:15.207 回答