我試圖從2個MySQL表中檢索一些數據,我遇到了一個小問題,防止在查詢中出現相同數據的多個數據。從多個表中選擇 - 重複的數據
我得到的是一個系統,用戶可以註冊一個帳戶,然後在該帳戶中註冊多個設備。對於每個設備,他們可以從我的每個應用程序提交數據。該數據將具有特定於該設備的唯一ID(下表Table_Data中的DATA_GUID
) - 這允許我通過計算數據GUID(它是從設備計算的)來更新特定設備上運行的特定應用程序的數據ID和源應用程序)。
請參見下面的直觀描述
這裏編輯是我的表的設置;
Table_Devices
- DEV_GUID (A唯一的設備ID)
- API_ID (A唯一的帳戶ID - 用於查看哪些帳戶設備所屬的)
- DEVICE_FRIENDLY_NAME (用戶可以用來識別設備的「友好名稱」)
- DEVICE_PLATFORM (設備平臺)
- DEVICE_MODEL (設備模型)
TABLE_DATA
- DATA_GUID (涉及到具體的應用程序的數據爲特定的設備的唯一ID)
- SOURCE_APPLICATION (應用程序wh ich提交了與數據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
相關聯的數據的每個可能的組合。
我哪裏錯了?
編輯
我想我可能混淆了幾個人,所以這裏的一些額外的碎片可能會助陣。
正如可以看到的,DATA_GUID爲每個應用程序是單個設備上不同,但相對於上的其它設備相同的應用程序也是不同的。例如,此設備上的設備0上的應用0具有不同的DATA_GUID到設備0上的應用1或設備1上的應用0例如。
使用上面的例子(連同提供的原始信息)基於提供Table_Devices.API_ID,我將如何檢索設備信息(從TABLE_DEVICES)和SOURCE_APPLICATION和DATA_GUID(從TABLE_DATA)(以表示圖片等同於'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。我試圖按照第一個僞結果表中顯示的內容(其中每行的數據是嚴格地說是正確的),但顯然包括原始請求中列出的額外字段。
要關聯和限制投影(這是選擇)的選擇(這是WHERE,很好笑,是不是,但這是因爲SELECT選擇哪些字段包含在您的數據中,而WHERE選擇數據記錄應包含在結果集中) – Peter