Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有空值的复杂mysql内部联接查询_Mysql - Fatal编程技术网

具有空值的复杂mysql内部联接查询

具有空值的复杂mysql内部联接查询,mysql,Mysql,我的质询如下: SELECT cp.p_id AS p_id ,cp.p_id AS pk ,cp.name_first AS name_first ,cp.name_last AS name_last [...] FROM tbl_E AS cp INNER JOIN tbl_B, tbl_C, tbl_A, tbl_D AS cpr WHERE cp.p_id = tbl_C.p_id AND tbl_C.sp_id = tbl_A.vsp_id AND tbl_B.

我的质询如下:

SELECT cp.p_id AS p_id
  ,cp.p_id AS pk
  ,cp.name_first AS name_first
  ,cp.name_last AS name_last
  [...]
FROM tbl_E AS cp
INNER JOIN tbl_B, tbl_C, tbl_A, tbl_D AS cpr
WHERE cp.p_id = tbl_C.p_id
  AND tbl_C.sp_id = tbl_A.vsp_id
  AND tbl_B.p_id = cp.p_id
  AND cpr.pr_id = tbl_A.pr_id
  AND (
    cp.p_id = 339066
    OR cp.p_id = 103688
    OR cp.p_id = 321496
    )
GROUP BY cp.p_id
ORDER BY name_last ASC LIMIT 0,1000;
我希望得到3行,但我得到的不到3行,因为tbl_C.p_id不包含所有的cp.p_id。如何更改查询以获得3行


谢谢。

这是因为您正在进行
内部连接。。。将其更改为
左侧外部联接
,如下所示

SELECT cp.p_id AS p_id
  ,cp.p_id AS pk
  ,cp.name_first AS name_first
  ,cp.name_last AS name_last
  [...]
FROM tbl_E AS cp
LEFT JOIN tbl_B ON tbl_B.p_id = cp.p_id
LEFT JOIN tbl_C ON cp.p_id = tbl_C.p_id
LEFT JOIN tbl_A ON tbl_C.sp_id = tbl_A.vsp_id
LEFT JOIN tbl_D AS cpr ON cpr.pr_id = tbl_A.pr_id
WHERE 
    cp.p_id IN (339066,103688,321496)
GROUP BY cp.p_id
ORDER BY cp.name_last 
LIMIT 0,1000;

这是因为您正在进行
内部联接
。。。将其更改为
左侧外部联接
,如下所示

SELECT cp.p_id AS p_id
  ,cp.p_id AS pk
  ,cp.name_first AS name_first
  ,cp.name_last AS name_last
  [...]
FROM tbl_E AS cp
LEFT JOIN tbl_B ON tbl_B.p_id = cp.p_id
LEFT JOIN tbl_C ON cp.p_id = tbl_C.p_id
LEFT JOIN tbl_A ON tbl_C.sp_id = tbl_A.vsp_id
LEFT JOIN tbl_D AS cpr ON cpr.pr_id = tbl_A.pr_id
WHERE 
    cp.p_id IN (339066,103688,321496)
GROUP BY cp.p_id
ORDER BY cp.name_last 
LIMIT 0,1000;