Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
Php 左表中空值的mysql连接查询_Php_Mysql_Sql_Jointable - Fatal编程技术网

Php 左表中空值的mysql连接查询

Php 左表中空值的mysql连接查询,php,mysql,sql,jointable,Php,Mysql,Sql,Jointable,我有下列表格 用户表 位置表 我想用location_id连接user和location表,并找到空记录。 我已经实现了以下查询,但它不起作用 SELECT * FROM user u left join location l ON u.location_id = l.location_id WHERE u.status_id = 1 and l.status_id = 1 and l.location_type = 1 o

我有下列表格

用户表 位置表 我想用location_id连接user和location表,并找到空记录。 我已经实现了以下查询,但它不起作用

SELECT * 
FROM user u 
    left join location l 
        ON u.location_id = l.location_id 
WHERE 
    u.status_id = 1 
    and l.status_id = 1 
    and l.location_type = 1 
    or u.location_id IS NULL
我期待这样的结果

user_id   name   location_id  status_id location_id   location_name   location_type status_id 
1         test   1               1        1            US                  1               1
2         john   NULL            1        NULL          NULL              NULL             NULL  
3         royi   1               1        1            US                  1               1
4         mahi   2               1        2            UK                  1               1
当我将l.location_类型更改为2时,预期结果如下

user_id   name   location_id  status_id location_id   location_name   location_type status_id 
2         john   NULL            1        NULL          NULL              NULL             NULL 

我想这是因为这种情况,我猜你想写
u.status


其他一切似乎都是对的^^

由于在location\u id的空记录中,l.status\u id和l.location\u type也将为空,因此您的查询将没有输出

你应该有

SELECT * FROM user u 
left join location l ON u.location_id = l.location_id 
WHERE u.status_id = 1 
and ((l.status_id = 1 and l.location_type = 1) or u.location_id IS NULL)
只有将它们放在括号中,OR子句才能正常运行并显示其中任何一个


我建议这应该是您的查询。

由于您使用左连接意味着您需要用户的所有记录和位置表中的相应记录以及位置中不存在的空值记录,您可以尝试以下查询:

SELECT u.*,l.* 
FROM user u 
left join location l 
ON u.location_id = l.location_id 
WHERE u.status_id = 1 and l.status_id = 1 and (l.location_type = 1 or u.location_id is null);
试试这个

SELECT * FROM user u left join location l ON u.location_id = l.location_id 
试试这个:

SELECT *
FROM user u 
    left join location l 
        ON u.location_id = l.location_id 
        and l.status_id = 1 
        and l.location_type = 1 
where 
    u.status_id = 1 

您不需要使用
u.location\u id为空
,因为左连接不排除用户,它只是在匹配的位置上添加用户的位置

我看到你编辑了你的帖子,并将john的身份从2改为1。当然,如果John status id为2,则查询永远无法检索到他(如果需要,删除
其中u.status\u id=1


请给我留言,如果预期输出错误,我会尽快修复。

您能指定预期输出吗?因为when无法为您提供没有问题的解决方案。您设置条件的用户和位置表中的状态id在哪里?您可以指定预期的输出吗?因为什么时候不能给你一个没有问题的解决方案。如果为空,位置表中的哪些元素应该与用户表匹配?@Ryx5我已经编辑了我的问题。请看一下,不难,给我5分钟,我做一个SQLFIDLE;)我想您可以通过删除
或u.location\u id为NULL来获得该结果。请查看myquestionhi thnx中的预期输出,以获得您的答复。请将location\u type从1更改为2,它将生成所有记录。但我需要location\u type=2的记录和NULL记录。我没有得到它。你能向我解释一下你在功能上和技术上想要什么吗?“我想检索所有用户并显示位置(如果存在),否则显示具有空值的用户而不是位置,但仅显示状态为…的用户和状态为…的位置。”是的,完全正确。我希望用户具有空值,而不是位置,但只有处于状态的用户。。。位置在状态1和位置类型2中,我们只需要获取用户“John”的行。我只是将l.location\u TYPE=1更改为l.location\u TYPE=2您需要注意的是:注意模式和数据内容
SELECT * FROM user u left join location l ON u.location_id = l.location_id 
SELECT *
FROM user u 
    left join location l 
        ON u.location_id = l.location_id 
        and l.status_id = 1 
        and l.location_type = 1 
where 
    u.status_id = 1