0

私は現在、1 つのテーブルで作業しています。このテーブルには、たとえば顧客番号が保持されます。この顧客番号は、この番号に関する詳細を取得したい他の 2 つのテーブルにあります (名前、電話番号)。
したがって、私のクエリは、一部のコード番号のクエリに一致する顧客のみを表示します。これは、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 JOIN代わりに使用INNER 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。最初の 2 つの結合によってその条件が保証されるためです。

于 2013-02-06T09:00:15.207 に答える