我目前正在制作一张桌子,这张桌子上有例如客户编号,这个客户编号可以在另外两张表中找到,我想提取有关这个号码的详细信息(姓名,电话技术)。
所以我的查询只显示在某些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),因为我有他们的代码(客户编号)。
谢谢!
答案 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
,因为前两个联接将确保该条件。