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'
我昨天回答了同样的问题
(编辑:威海站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|