以下是sql:
SELECT
T.ID AS 'id',
P.PRODUCT_CODE AS 'productCode',
P.PRODUCT_NAME AS 'productName',
P.BRAND_ID AS 'brandId',
T.QUANTITY AS 'distributorId',
W.WAREHOUSE_NAME AS 'keyWord',
P.BIG_UNIT_ID AS 'bigUnitId',
P.LITTLE_UNIT_ID AS 'little_unit_id',
S.SPEC_NAME AS 'categoryId'
FROM
ol_warehouse_product T
LEFT JOIN ol_product P ON T.PRODUCT_ID = P.ID
LEFT JOIN ol_warehouse W ON T.WAREHOUSE_ID = W.ID
LEFT JOIN ol_product_spec S ON T.PRODUCT_ID = S.PRODUCT_ID
WHERE
1 = 1
AND T.DEL_FLAG LIKE '%0%'
GROUP BY
T.ID,
P.PRODUCT_CODE,
P.PRODUCT_NAME,
P.BRAND_ID,
T.QUANTITY,
W.WAREHOUSE_NAME,
P.BIG_UNIT_ID,
P.LITTLE_UNIT_ID,
S.SPEC_NAME
ORDER BY
T.CREATE_DATE DESC
以下是查询结果:
现在想一次性把跟ol_warehouse_product这张表有关联的数据查出来,出现重复数据,找了好久资料都没办法解决,最开始的时候有很多重复数据,通过group by之后现在就剩下两条了,但是数据库ol_warehouse_product表中其实只有一条数据,并且S.SPEC_NAME的值是“块”,不知道从那里跑出来个分,各位大大,给小弟一点建议吧。
这种情况肯定是数据问题,DEL_FLAG LIKE '%0%'的有两条数据,你再确认下。
应该是数据的问题。既然是S表中的数据,不妨把其他表的放一边,只查S和T看看
不太明白你想要什么结果,如果是想把下面那个跳数据合并成一条,就把groupby 里面的
S.SPEC_Name
去掉就好了
左连接是这样的,比如主表有1跳数据,从表有2条数据,那么 他就会显示2条,你这估计是从表数据不止一条
不太明白你想要什么结果,如果是想把下面那个跳数据合并成一条,就把groupby 里面的
需求是什么,如果只要主表数据,那你group by只需要主表id就可以了
既然 分不是你想要的,那你先查出来这个资料,看是否历史数据,可标记作废后关联。
你应该把表结构给我们看一下的
同一个商品对应了两个分类,查出来当然是两条了
在select后面加入DISTINCT,那么你查询出来的结果就不会有完全相同的数据
这个‘分’是从哪里跑出来的呢? 是从ol_product_spec 这个表中的跑出来的。
在ol_product_spec 这个表中 你的水泥(T.PRODUCT_ID = S.PRODUCT_ID=‘水泥ID’) 对应的SPEC_NAME有两个。_
左连接 是以左面为主表 ,左侧的表中有的数据都会显示(不管从表中是否有对应数据),而与左侧表中相对应的复合条件的从表中的数据,都一一显示。
你可以 select * from ol_product_spec where PRODUCT_ID='水泥ID' 运行一下这个sql 看看是不是两条数据
所以,这不是去重 如果数据库数据没问题的话 这样查应该是对的
直接去掉左联接吧,select 字段 from ol_product_spec,ol_product,ol_warehouse,ol_product_spec where 这几张表的连接条件+过滤条件。 这样写出来就么有重复数据。
在select后面加入DISTINCT
应该是join连接的问题