MYSQL多表查询问题,left join的使用问题求教
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL多表查询问题,left join的使用问题求教相关的知识,希望对你有一定的参考价值。
楼上两个的回答太无语了...null是不能使用等于号判定的,把where table2.id = null变成where table2.id IS NULL
对于null值mysql中需要使用IS NULL或者IS NOT NULL判断,而不是=和!=追问
还是出不来数据!麻烦您测试一下。
追答没什么问题啊,我写一遍你试试看
SELECT table1.*
FROM table1
LEFT JOIN table2 ON table1.id = table2.id
WHERE table2.id IS NULL
我已经测试了,可以的
是可以了,原因是查询速度太慢了,我没等到时间。速度为才能那么慢呀?左表总数据量才3000多条,不过,右表数据量大一点。能更好的办法查询吗?好了,我加分。
追答这两个id不是主键吗?如果不是的话就加上索引吧
另外你尝试一下在数据库上用命令行或者phpmyadmin直接执行sql,就算再慢也不会超过20秒的,才3000条而已,我怀疑你是对sql返回值的处理有问题导致的慢。
是索引的问题,已解决!谢谢!
追答不客气。解决了就好
参考技术A left join 是以左边的表为主表,左边表满足的数据都会显示,而右边的表有的会显示没有的会显示null追问意思我知道呀,现在我就是想查左边表有右边表没有的项呀,有别的办法吗?比如我想查左边ID为3的项,有好办法吗?
追答select * from table1 left join table2 on table1.id=table2.id where table2.id is null
用table2.id is null 试试不用table2.id = null
追问好像还是不行呀。
追答用右连接,这样查询出来的是两个表都有的数据,吧结果集中的左边表的主键循环出来,用逗号连接,然后再写一个sql语句,假设循环出来的主键的字符串是$a=1,2
$sql=select * from table1 where id not in ($a);
不太明白,我数据量很大的,就想从中查出A表中有,B 表中没有的项
追答首先select * from table1 right join table2 on table1.id=table2.id 这样查询出来不就是满足右边表的数据吗,也就是第一条和第二条数据,然后$sum=''; foreach($res as $key=>$val)
$sum=$val['左表中的主键的字段名'].','.$sum;
$sum=substr($sum,0,-1);
这样$sum不就是1,2了吗!
然后查询 select * from table1 where 主键的字段 not in ($sum);执行就是了
SELECT * FROM table1 LEFT JOIN user
ON table1.id = table2.id WHERE table2.id IS NULL
希望对你有所帮助! 参考技术C select * from table1 as t1 left join table2 as t2 wheret1.id=t2.id 参考技术D where要放在left join前边追问
是这样的吗?select * from table1 where table2.id=null left join table2 on table1.id=table2.id 试了试还是不行呀
追答没看到有个有语的回答说null值要用is判断吗。还有我搞错了,where是放在join后面。
SQL多表联合查询(LEFT JOIN)条件差异
查询A:
select a.*,b.* into Bus605115_ON_Where_And --(642 行受影响)
from PositionN a left join szt b
on b.[fQCBH]=a.fBusNo
where fdealtime between fDInTime and fDInTimeN
and fbusno=605115
查询B:
select a.*,b.* into Bus605115_ON_And_Where --(835 行受影响)
from PositionN a left join szt b
on b.[fQCBH]=a.fBusNo
and fdealtime between fDInTime and fDInTimeN
where fbusno=605115
查询A、B的结果差异:
select * from Bus605115_ON_And_Where a
where not exists
(
select 1 from Bus605115_ON_Where_And b
where a.fGuid=b.fGuid
)
order by a.fDInTime
查询A中只有两表互相之间能关联的结果;
查询B中还包含未与b关联的结果,因此记录数比查询A多;
以上是关于MYSQL多表查询问题,left join的使用问题求教的主要内容,如果未能解决你的问题,请参考以下文章