Php 左表中空值的mysql连接查询
我有下列表格 用户表 位置表 我想用location_id连接user和location表,并找到空记录。 我已经实现了以下查询,但它不起作用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
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