解析MySQL:通过查询删除重复记录的单表不同的多表组
多表的唯一查询:按组
当明确查询多个表时,左连接是有效的,完整连接无效。
使用MySQL时,有时需要查询非重复字段记录,尽管MySQL提供不同的这个关键词过滤掉多余的重复记录只保留一个,但往往只使用它返回的数量不得重复记录,而不是用它来返回重复记录的所有值,原因是不同的只能返回其目标领域,而无法返回到其他领域,具有鲜明的不,我只使用双循环查询来解决,所以大量的站点数据,无疑将直接影响其效率。
让我们先看一下示例。
表的结构如下所示:
我的名字
1
2 B
3 C
4 C
5 B
基本表的结构可能是这样的,这只是一个简单的例子,实际的多表查询等将更加复杂。
例如,我希望使用语句查询所有名称不重复的数据,因此必须使用不同的方式删除冗余的重复记录。
从表中选择不同的名称
结果是:
名称
一
C
它似乎是有效的,但什么是ID值,我想得到的更改查询语句。
从表中选择不同的名称、ID
结果将是:
我的名字
1
2 B
3 C
4 C
5 B
为什么区分不起作用效果实际上已经完成了,但是他同时工作两个字段,也就是说,必须得到相同的ID和名称才能被排除在外。
我们将更改查询:
从表中选择id、不同名称
遗憾的是,除了错误的信息外,你什么也得不到,而且必须在一开始就有区别。试着犯错误。
另一半认为方法不工作,最后在MySQL手册找到使用,group_concat(不同的名字)与集团的名字去实现我们想要的功能,兴奋,我也尽量节省。
虚假的,沮丧的!
即使是MySQL手册也不能和我一起,第一次给了我希望,然后又把我推了下去。
仔细一看,这group_concat功能4.1支持,晕,我4。没办法,升级,提高测试水平,成功。
终于完成了,但这样,我们也必须要求客户升级。
突然,机器闪烁,因为group_concat功能可以使用,可其他功能可以吗
快速使用计数函数尝试,成功,它花了这么多时间,它是如此简单。
现在完整的声明被释放了:
按名称从表组中选择*,计算(不同的名称)
结果:
id计数(不同的名称)
1 1
2 B 1
3 C 1
最后一个项目是多余的,没有了管,目标就实现了。
MySQL太蠢了,他欺骗了他一点点,现在我希望你不想被这个问题所困扰。
顺便说一下,按组必须按顺序排列和限制,否则就错了。
让我们举一个组的实际例子。
复制代码代码如下所示:
不同的n.nid SQL = 'select美元,tn.tid,n.title,n.created ni.thumbpath { },从term_node TN,从,它也被称为其应用。
RES = db_query美元($ SQL);
t_data美元=阵();
而(r = db_fetch_array($ RES)){
print_r(r);
}
当这个查询使用,总是会有相同的NID 2例,如下面的结果
复制代码代码如下所示:
阵列
(
{已创建} > 1215331278
{ NID } = > 1603
{ } = > 32次
夏日婚礼绿色秦饮料DIY
{ thumbpath } = >文件 / / home-77.1_tn.webp node_images
)
阵列
(
{已创建} > 1215331278
{ NID } = > 1603
{ } = > 32次
夏日婚礼绿色秦饮料DIY
{ thumbpath } = >文件 / / 003_primary_tn.webp node_images
)
不同,它不工作,但它的作品,但我认为该结构中是唯一的一个。
最后,按组使用。
复制代码代码如下所示:
SQL 'select美元
N.nid,tn.tid,n.title,n.created,ni.thumbpath { }内的term_node TN
加入{结} n n.nid = tn.nid内加入node_images }倪{
镍。NID = n.nid tn.tid在哪里('(','美元崩溃,TID)。)组
n.nid desc;
RES = db_query美元($ SQL);
t_data美元=阵();
而(r = db_fetch_array($ RES)){
print_r(r);
}
我得到的唯一标识。