mysql - 从多个表中选择 - 重复数据

标签 mysql

我正在尝试从 2 个 MySQL 表中检索一些数据,但遇到了一个小问题,无法在查询中出现多个相同的数据。

我拥有的是一个系统,用户可以在其中注册一个帐户,然后将多个设备注册到该帐户中。对于每个设备,他们可以提交来 self 的每个应用程序的数据。该数据将具有特定于该设备的唯一 ID(下面 Table_Data 表中的DATA_GUID)——这使我可以通过计算数据来更新在特定设备上运行的特定应用程序的数据GUID(根据设备 ID 和源应用程序计算得出)。

请参阅下面的编辑以获取视觉描述

这是我的 table 设置;

表设备

  • DEV_GUID (唯一的设备 ID)
  • API_ID (唯一的帐户 ID - 用于查看设备属于哪个帐户)
  • DEVICE_FRIENDLY_NAME(用户可用来识别设备的“友好名称”)
  • DEVICE_PLATFORM (设备平台)
  • DEVICE_MODEL (设备型号)

表数据

  • DATA_GUID (与特定设备的特定应用程序数据相关的唯一 ID)
  • SOURCE_APPLICATION(提交与 DATA GUID 相关的数据的应用程序)

我想要实现的是获取单个设备详细信息(即 GUID、友好名称、平台、型号)以及与该设备关联的每个 DATA_GUID 的列表(以及 SOURCE_APPLICATION 提交自),基于我提交的 API_ID。

我尝试了这个查询(末尾的值显然包含有效的 API_ID);

SELECT
a.DEV_GUID, a.DEVICE_FRIENDLY_NAME, a.DEVICE_PLATFORM, a.DEV_MODEL,
b.DATA_GUID, b.SOURCE_APPLICATION
FROM Table_Devices a
INNER JOIN
Table_Data b
WHERE a.API_ID = "value"

不幸的是,它会返回数据、设备等的所有可能组合,而不是仅返回与特定 API_ID 关联的数据。

我哪里出错了?

<小时/>

编辑

我想我可能会让一些人感到困惑,所以这里有一些额外的内容可能会有所帮助。

enter image description here

如您所见,每个应用程序的 DATA_GUID 在单个设备上都不同,而且与其他设备上的同一应用程序相比也不同。例如,此帐户的设备 0 上的应用 0设备 0 上的应用 1设备 1 上的应用 0 具有不同的 DATA_GUID示例。

使用上面的示例(以及提供的原始信息),我将如何检索设备信息(来自 TABLE_DEVICES)以及 SOURCE_APPLICATION 和 DATA_GUID(来自 TABLE_DATA)根据提供的 Table_Devices.API_ID(在图中表示为“ACC0”的等效项)?

我可能期望返回的结果;

 | DEV_GUID | SOURCE_APPLICATION | DATA_GUID  | API_ID |
 -------------------------------------------------------
 | DEV0     | APP0               | ACC0_D0_A0 | ACC0   |
 | DEV0     | APP1               | ACC0_D0_A1 | ACC0   |
 | DEV0     | APP2               | ACC0_D0_A2 | ACC0   |
 | DEV1     | APP0               | ACC0_D1_A0 | ACC0   |
 | DEV1     | APP1               | ACC0_D1_A1 | ACC0   |
 | DEV1     | APP2               | ACC0_D1_A2 | ACC0   |
 | DEV2     | APP0               | ACC0_D2_A0 | ACC0   |
 | DEV2     | APP1               | ACC0_D2_A1 | ACC0   |
 | DEV2     | APP2               | ACC0_D2_A2 | ACC0   |
 -------------------------------------------------------

我实际返回的结果是详细信息的每个组合,因此例如它可能会显示其中一行的类似内容;

 | DEV_GUID | SOURCE_APPLICATION | DATA_GUID  | API_ID |
 -------------------------------------------------------
 | DEV1     | APP2               | ACC0_D0_A1 | ACC0   |
 -------------------------------------------------------

显然,ACC0_D0_A1 尽管对该帐户有效,但对于在 DEV1 上运行的 APP2 无效。我正在尝试实现第一个伪结果表中显示的内容(其中每行的数据严格正确可以这么说),但显然包括在原始请求。

最佳答案

SELECT
a.DEV_GUID, a.DEVICE_FRIENDLY_NAME, a.DEVICE_PLATFORM, a.DEV_MODEL,
b.DATA_GUID, b.SOURCE_APPLICATION
FROM Table_Devices a
INNER JOIN
Table_Data b
WHERE a.API_ID = "value" AND a.DEV_GUID = b.DATA_GUID

关于mysql - 从多个表中选择 - 重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20984945/

相关文章:

php - CakePHP:在 HABTM 中保存数据的正确格式是什么

mysql - 通过给出过程名称来获取参数名称 - MySQL

mysql - 获取 3 天前整小时的结果

mysql - 如何构建安装 MySQL 的自定义 Docker 镜像并将 Jib 配置为将其用作 Java 应用程序的基础镜像?

php - 以编程方式从产品中删除类别

c# - Mysql 多次addwithvalue : one returned value is enough

php - yii2 下拉列表 onchange

php - 日期时间字段不会在 MySQL 中更新时更改

mysql - #1005 mysql错误keys错误

php - 从选择 MYSQL PHP 中隐藏特定行