SQL连接一张表中没有重复记录

标签 sql join

您好,我正在使用 Mysql PHP 组合,我有 3 个名为
1.学生(姓名、姓名、百分比)
2.位置(地点、地区、州)
3. Refer(referid,locid,nameid) 表示多对多关系,这意味着

一个学生有很多位置记录,并且一个位置有很多学生,这些关系是通过指定表 ID(学生,位置)来通过引用表来维护的,并且两个表的记录不应重复

我的 table
table 学生

NAMEID - 姓名 - 百分比
N1 ---- nameA --------70
N2-----姓名B--------63
N3----- nameC -------45

表位置
地点--区域--州
L1-----A区----------P
L2------AreaB --------- Q
L3-----区域C-------- R

TABLE-REFER
REFERID--NAMEID--LOCID
R1-------- N1------ L1
R2-------- N1------ L2
R3---------- N2------ L1
R4---------- N3------ L3

实际输出
NAMEID--名称--百分比--LOCID--区域--州
N1-----名称A-----70------L1------区域A-- ---P
N1------姓名A----70--------L2------区域B----- Q 重复的学生记录
N2------名称B----63--------L1-----区域A-----P
N3------名称C----45--------L3-----区域C-----R



问题:
当我尝试通过 sql 连接来连接三个表时,如下
从学生连接中选择 * 引用 Student.nameid=refer.nameid 连接位置 on location.locid=refer.locid
它显示的记录包括来自学生的重复记录(如果学生记录连接到来自位置的多个记录),但我只需要唯一的学生记录,其中有许多位置记录,例如

NAMEID--名称--百分比--LOCID--区域--州
N1-----名称A-----70--------L1--------区域A----P
--------------------------------L2-------- 区域B---- Q Student 中的重复记录为 NULL
N2-----名称B--------63-------- L1--------区域A----- P
N3------名称C--------45---------L3--------区域C----- R



NAMEID--名称--百分比--LOCID--区域--州---LOCID2--区域2--州2
N1---------名称A--- -----70------ L1--------区域A----P------------ --L2----------areaB------Q 位置应与学生结合
N2--------名称B----------63------ L1-----区域A-----P
N3--------名称C------------45--------L3-----区域C----R


请建议我通过 SQL 语句或 PHP 代码实现此目的的方法,因为我必须从这些数据中生成报告,例如

报告:
姓名:姓名A
百分比:70
AREA1:A区
AREA2:区域B
状态1:P
状态2:Q
--------------------------------------
姓名:姓名A
百分比:63
AREA1:区域A
a 状态1:P


提前致谢

最佳答案

这似乎是应用程序本身的工作:

$results = array();
while ($data = $qry->fetch(PDO::FETCH_OBJ))
{
  if (!isset($results[$data->NAME]))
    $results[$data->NAME] = array('percent' => $data->PERCENT, 'areas' => array(), 'states' => array());
  $results[$data->NAME]['areas'][] = $data->AREA;
  $results[$data->NAME]['states'][] = $data->STATE;
}

// parse $results into your report...

关于SQL连接一张表中没有重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17991708/

相关文章:

mysql - 堆叠式 SQL 查询错误和并发症

mysql - 组合两个选择查询

mysql - 从两个表中获取具有 min(priority) 的行

PHP/SQL 投票和统计结果

sql - 编写SQL脚本插入数据

mysql - 在 MySQL 上将 blob 数据从一个表复制到另一个表

用于连接表的 CodeIgniter Active Record

mysql - 在另一个查询 MySQL 中使用来自一个查询的 SUM

c# - mySQL 从一个表中选择,从另一个表中加入,然后从新表中选择

sql - SQL Server中for循环的语法