a和b用如下SQL执行,记录数是4253PCS, SELECT B.厂内不良数量+B.厂外不良数量 不良数量,B.不良分类 总不良数 FROM Qcountsum A LEFT JOIN ( SELECT gb91,gb92 厂内不良数量,gb94 厂外不良数量,gb02 工序名称, CASE WHEN gb02 like '%外观%' then '外观不良' ELSE '电气不良' END AS 不良分类 FROM Qcountb WHERE gb51 BETWEEN '2014-06-01' and '2014-06-30' ) B ON A.SID=B.gb91 LEFT JOIN Apm D on A.sga02=D.no WHERE A.sga91 > 0 AND A.sga51 BETWEEN '2014-06-01' and '2014-06-30' AND D.cinvcname ='宁波博禄德' AND B.不良分类 IS NOT NULL
你是不是弄错了什么概念,left join只是说如果没数据左表也能出一条数据,没说如果有数据的也只出左表一条数据吧。left join的结果其实就是inner join的结果 + 左表没有被inner join关联出的数据而已。 联系你的sql看,就是a和b,e做inner join后结果集 + a表中inner join以外数据的集合,所以数据多了很多,不是a和b,e做inner join后结果集造成的,就是a表中inner join以外数据的集合本身条数就多 就是a表中inner join以外数据的集合本身条数就多 我用以下SQL 测试过,只有4290条呢 SELECT A.* FROM Qcountsum A LEFT JOIN Apm D on A.sga02=D.no LEFT JOIN (SELECT gb91,gb92 厂内不良数量,gb94 厂外不良数量 FROM Qcountb WHERE gb51 BETWEEN '2014-06-01' and '2014-06-30') E ON A.SID=E.gb91 WHERE a.sga91 > 0 AND a.sga51 BETWEEN '2014-06-01' and '2014-06-30' AND D.cinvcname ='宁波博禄德'
拿掉AND D.cinvcname ='宁波博禄德' 有多少数据?你是不是弄错了什么概念,left join只是说如果没数据左表也能出一条数据,没说如果有数据的也只出左表一条数据吧。left join的结果其实就是inner join的结果 + 左表没有被inner join关联出的数据而已。 联系你的sql看,就是a和b,e做inner join后结果集 + a表中inner join以外数据的集合,所以数据多了很多,不是a和b,e做inner join后结果集造成的,就是a表中inner join以外数据的集合本身条数就多 就是a表中inner join以外数据的集合本身条数就多 我用以下SQL 测试过,只有4290条呢 SELECT A.* FROM Qcountsum A LEFT JOIN Apm D on A.sga02=D.no LEFT JOIN (SELECT gb91,gb92 厂内不良数量,gb94 厂外不良数量 FROM Qcountb WHERE gb51 BETWEEN '2014-06-01' and '2014-06-30') E ON A.SID=E.gb91 WHERE a.sga91 > 0 AND a.sga51 BETWEEN '2014-06-01' and '2014-06-30' AND D.cinvcname ='宁波博禄德'
那是因为你没有inner join b,只inner join了e,inner join又不是规定越join越少 B ON A.SID=B.gb91 应该是 inner join b 吧
为什么老是只是单独两张表做关联,你用a inner join b和c一起看一下啊
SELECT * FROM Qcountsum A LEFT JOIN ( ) B ON A.SID=B.gb91 LEFT JOIN Apm D on A.sga02=D.no LEFT JOIN () E ON A.SID=E.gb91 就会造成笛卡尔积吗,我测试一下.
A表 ID 1 1 1B表 ID 1 你说LEFT JOIN 多少条数据?????,或者 换过来A,B表也可以。就像上面说的,关联不定一是越来越少。可能越来越多。
为什么老是只是单独两张表做关联,你用a inner join b和c一起看一下啊 我没有C盘,我大概的逻辑如下 SELECT * FROM Qcountsum A LEFT JOIN ( ) B ON A.SID=B.gb91 LEFT JOIN Apm D on A.sga02=D.no LEFT JOIN () E ON A.SID=E.gb91
SELECT B.厂内不良数量+B.厂外不良数量 不良数量,B.不良分类 总不良数
FROM Qcountsum A LEFT JOIN
( SELECT gb91,gb92 厂内不良数量,gb94 厂外不良数量,gb02 工序名称,
CASE WHEN gb02 like '%外观%' then '外观不良' ELSE '电气不良' END AS 不良分类
FROM Qcountb WHERE gb51 BETWEEN '2014-06-01' and '2014-06-30' ) B ON A.SID=B.gb91 LEFT JOIN Apm D on A.sga02=D.no
WHERE A.sga91 > 0 AND A.sga51 BETWEEN '2014-06-01' and '2014-06-30' AND D.cinvcname ='宁波博禄德'
AND B.不良分类 IS NOT NULL
发到[email protected]
我所有的LEFT JOIN on 都是以A 为左连接, b与e没有做任何关联.
联系你的sql看,就是a和b,e做inner join后结果集 + a表中inner join以外数据的集合,所以数据多了很多,不是a和b,e做inner join后结果集造成的,就是a表中inner join以外数据的集合本身条数就多
联系你的sql看,就是a和b,e做inner join后结果集 + a表中inner join以外数据的集合,所以数据多了很多,不是a和b,e做inner join后结果集造成的,就是a表中inner join以外数据的集合本身条数就多
就是a表中inner join以外数据的集合本身条数就多 我用以下SQL 测试过,只有4290条呢
SELECT A.*
FROM Qcountsum A LEFT JOIN Apm D on A.sga02=D.no LEFT JOIN
(SELECT gb91,gb92 厂内不良数量,gb94 厂外不良数量 FROM Qcountb WHERE gb51 BETWEEN '2014-06-01' and '2014-06-30') E ON A.SID=E.gb91
WHERE a.sga91 > 0 AND a.sga51 BETWEEN '2014-06-01' and '2014-06-30' AND D.cinvcname ='宁波博禄德'
联系你的sql看,就是a和b,e做inner join后结果集 + a表中inner join以外数据的集合,所以数据多了很多,不是a和b,e做inner join后结果集造成的,就是a表中inner join以外数据的集合本身条数就多
就是a表中inner join以外数据的集合本身条数就多 我用以下SQL 测试过,只有4290条呢
SELECT A.*
FROM Qcountsum A LEFT JOIN Apm D on A.sga02=D.no LEFT JOIN
(SELECT gb91,gb92 厂内不良数量,gb94 厂外不良数量 FROM Qcountb WHERE gb51 BETWEEN '2014-06-01' and '2014-06-30') E ON A.SID=E.gb91
WHERE a.sga91 > 0 AND a.sga51 BETWEEN '2014-06-01' and '2014-06-30' AND D.cinvcname ='宁波博禄德'
B ON A.SID=B.gb91 应该是 inner join b 吧
FROM Qcountsum A LEFT JOIN ( ) B ON A.SID=B.gb91
LEFT JOIN Apm D on A.sga02=D.no LEFT JOIN
() E ON A.SID=E.gb91
就会造成笛卡尔积吗,我测试一下.
ID
1
1
1B表
ID
1
你说LEFT JOIN 多少条数据?????,或者 换过来A,B表也可以。就像上面说的,关联不定一是越来越少。可能越来越多。
我没有C盘,我大概的逻辑如下
SELECT *
FROM Qcountsum A LEFT JOIN ( ) B ON A.SID=B.gb91
LEFT JOIN Apm D on A.sga02=D.no LEFT JOIN
() E ON A.SID=E.gb91
[a] [int] NULL,
[b] [nvarchar] (50) NULL)INSERT [a] ([a],[b]) VALUES ( 1,N'1')
INSERT [a] ([a],[b]) VALUES ( 2,N'1')
INSERT [a] ([a],[b]) VALUES ( 3,N'1')
CREATE TABLE [b] (
[a] [int] NULL,
[c] [int] NULL)INSERT [b] ([a],[c]) VALUES ( 1,2)
INSERT [b] ([a],[c]) VALUES ( 2,2)
INSERT [b] ([a],[c]) VALUES ( 3,2)CREATE TABLE [c] (
[a] [int] NULL,
[d] [int] NULL)INSERT [c] ([a],[d]) VALUES ( 1,3)
INSERT [c] ([a],[d]) VALUES ( 2,3)
INSERT [c] ([a],[d]) VALUES ( 3,3)
直接用SELECT * FROM a left join b on a.a=b.a left join c on a.a=c.a查询,只有三条记录,并没有发生笛卡尔积,哈哈,我不用怀疑我的逻辑了,但是问题到底在那里呢,好奇怪