加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

MySQL内部连接不同的结果

发布时间:2022-12-08 13:31:30 所属栏目:MsSql教程 来源:互联网
导读: MySQL内部连接不同的结果
mysql
MySQL内部连接不同的结果,mysql,Mysql,我试图找出以下两个查询返回不同结果的原因:SELECT DISTINCT i.id, i.date FROM `tblinvoices` iINNER JOIN `tblin

MySQL内部连接不同的结果

mysql

MySQL内部连接不同的结果,mysql,Mysql,我试图找出以下两个查询返回不同结果的原因:SELECT DISTINCT i.id, i.date FROM `tblinvoices` iINNER JOIN `tblinvoiceitems` it ON it.userid=i.useridINNER JOIN `tblcustomfieldsvalues` cf ON it.relid=cf.relid WHERE i.`tax` = 0 AND i.`date` BETWEEN '2012-07-01' AND

我试图找出以下两个查询返回不同结果的原因:

SELECT DISTINCT i.id, i.date  
FROM `tblinvoices` i
INNER JOIN `tblinvoiceitems`  it ON it.userid=i.userid
INNER JOIN `tblcustomfieldsvalues`  cf ON it.relid=cf.relid  
WHERE i.`tax` = 0  
AND i.`date`  BETWEEN  '2012-07-01' AND '2012-09-31'  

很明显,这里的区别在于内部连接,但我不明白为什么有内部连接的返回的结果比没有内部连接的少,我会想,既然我没有做任何交叉表引用,它们应该返回相同的结果

我正在研究的最后一个问题是

SELECT DISTINCT i.id, i.date  
FROM `tblinvoices` i
INNER JOIN `tblinvoiceitems`  it ON it.userid=i.userid
INNER JOIN `tblcustomfieldsvalues`  cf ON it.relid=cf.relid  
WHERE  cf.`fieldid` =5  
AND  cf.`value` 
REGEXP  '[A-Za-z]'
AND i.`tax` = 0  
AND i.`date`  BETWEEN  '2012-07-01' AND '2012-09-31'  

但是,由于添加内部联接时不同的结果似乎不正确(它删除了一些应该有效的结果),它目前不起作用,谢谢。

内部联接语句将检索存储在jion语句的两个表中的行。尝试左JOIN语句。这将返回第一个表中的行,但第二个表中不需要这些行:

SELECT DISTINCT i.id, i.date  
FROM `tblinvoices` i
LEFT JOIN `tblinvoiceitems`  it ON it.userid=i.userid
LEFT JOIN `tblcustomfieldsvalues`  cf ON it.relid=cf.relid  
WHERE i.`tax` = 0  
AND i.`date`  BETWEEN  '2012-07-01' AND '2012-09-31'  

内部JOIN语句将检索jion语句的两个表中存储的行。尝试左JOIN语句。这将返回第一个表中的行,但第二个表中不需要这些行:

SELECT DISTINCT i.id, i.date  
FROM `tblinvoices` i
LEFT JOIN `tblinvoiceitems`  it ON it.userid=i.userid
LEFT JOIN `tblcustomfieldsvalues`  cf ON it.relid=cf.relid  
WHERE i.`tax` = 0  
AND i.`date`  BETWEEN  '2012-07-01' AND '2012-09-31'  

内部联接意味着只显示两个表中存在相同ID值的记录

左连接意味着显示左表中的所有记录(即SQL语句中位于前面的记录)mssql 内部连接,而不管右表中是否存在匹配的记录

尝试左连接而不是内连接

SELECT DISTINCT i.id, i.date  
FROM `tblinvoices` i
LEFT JOIN `tblinvoiceitems`  it ON it.userid=i.userid
LEFT JOIN `tblcustomfieldsvalues`  cf ON it.relid=cf.relid  
WHERE i.`tax` = 0  
AND i.`date`  BETWEEN  '2012-07-01' AND '2012-09-31'  

内部联接意味着只显示两个表中存在相同ID值的记录

左连接意味着显示左表中的所有记录(即SQL语句中位于前面的记录),而不管右表中是否存在匹配的记录

尝试左连接而不是内连接

SELECT DISTINCT i.id, i.date  
FROM `tblinvoices` i
LEFT JOIN `tblinvoiceitems`  it ON it.userid=i.userid
LEFT JOIN `tblcustomfieldsvalues`  cf ON it.relid=cf.relid  
WHERE i.`tax` = 0  
AND i.`date`  BETWEEN  '2012-07-01' AND '2012-09-31'  

我昨天回答了同样的问题

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!