我想根据-std=c++11
和listings.product_id
这个简单的查询返回400.000行(我要保留的行的id):
listings.channel_listing_id
虽然此变体返回1.600.000行(表中的所有记录),但不仅is_verified = 0:
SELECT id FROM `listings` WHERE is_verified = 0 GROUP BY product_id, channel_listing_id
我希望他们返回相同数量的行。 这是什么原因?如何避免它(为了在DELETE语句的where条件中使用subselect)?
编辑:我发现在SELECT * FROM (SELECT id FROM `listings` WHERE is_verified = 0 GROUP BY product_id, channel_listing_id) AS keepem
""修复了#{1}}它(它应该返回400.000条记录)。我仍然不确定是否应该相信此子查询,因为SELECT DISTINCT
语句中没有SELECT
。
编辑2:似乎只是phpMyAdmin报告行总数的方式中的一个错误。
答案 0 :(得分:1)
您的查询不明确。假设您有两个具有相同product_id和channel_id的列表。然后应该返回id
的内容?第一个,第二个?或两者都忽略了GROUP请求?
如果不同产品和渠道ID 多个ID 会怎样?
选择MAX(id) AS id
并添加DISTINCT。
是否有任何外键需要担心?如果没有,您可以将原始表格倒入副本中,清空原始表格并仅将其复制回非重复内容。 Messier,但你只能保证SELECTs或DELETE成功,你也可以保留备份。
答案 1 :(得分:0)
指定别名以避免字段引用歧义:
SELECT
keepem.*
FROM
(
SELECT
innerStat.id
FROM
`listings` AS innerStat
WHERE
innerStat.is_verified = 0
GROUP BY
innerStat.product_id,
innerStat.channel_listing_id
) AS keepem