2014-08-27 53 views
1

我已經閱讀了幾篇關於這個問題的SO帖子,但我仍然不理解該解決方案。我認爲我只是缺少一些小事,就使這項工作正常:另一個MySQL 1066.不是唯一的表/別名:從多個表中選擇'events'

#1066 - Not unique table/alias:

#1066 - error not unique table alias

#1066 - Not unique table/alias: 'tb_X'

這裏是在查詢一個變種我試過,如果我運行這個,MySQL Workbench 6.1剛剛進入la-la-land,我必須取消查詢。

SELECT `events`.`DateTime`, `events`.`User`, `eventdetails`.`ItemName`, `eventdetails`.`ItemValue` 
FROM `events`, `eventdetails` 
INNER JOIN `events` events1 ON `events1`.`Event_ID` = `eventDetails`.`Event_ID` 
WHERE `events`.`PCBID` = 12946 
ORDER BY `events`.`DateTime` DESC; 

這種變異給我的稱號1066錯誤:

SELECT `events`.`DateTime`, `events`.`User`, `eventdetails`.`ItemName`, `eventdetails`.`ItemValue` 
FROM`events`, `eventdetails` 
INNER JOIN `events` ON `events`.`Event_ID` = `eventDetails`.`Event_ID` 
WHERE `events`.`PCBID` = 12946 
ORDER BY `events`.`DateTime` DESC; 

我明白,我使用的是events表兩次,但似乎並沒有能夠得到一個可行的版本那不超時。

我的數據:

的 '事件' 的結果應該來自於這些行:

Event_ID | PCBID | EventType_ID | DateTime    | User 
73819  | 12946 | 1    | 03-Sep-09 07:10:07 | USERNAME 
73992  | 12946 | 1    | 11-Sep-09 06:51:09 | USERNAME 
74159  | 12946 | 1    | 16-Sep-09 07:22:49 | USERNAME 
74445  | 12946 | 1    | 08-Jan-10 13:41:16 | USERNAME 

和 'eventdetails' 結果應該來自於這些行:

EventDetails_ID | Event_ID | ItemName   | ItemValue 
37595   | 73819  | SBESerialNumber | 70000862 
37948   | 73992  | Notes    | Passed IMM Cold Test B 
38115   | 74159  | Notes    | passed UCSD specific timing test 
38423   | 74445  | SBESerialNumber | 00000000 

預期結果:

我要找應該是這個樣子的結果:

DateTime   | User  | ItemName   | ItemValue 
03-Sep-09 07:10:07 | USERNAME | SBESerialNumber | 70000862 
11-Sep-09 06:51:09 | USERNAME | Notes    | Passed IMM Cold Test B 
16-Sep-09 07:22:49 | USERNAME | Notes    | passed UCSD specific timing test 
08-Jan-10 13:41:16 | USERNAME | SBESerialNumber | 00000000 
+0

第一個查詢工作對我來說:http://www.sqlfiddle.com/#!2/6bdd6/1 – Barmar 2014-08-27 17:28:43

+0

你爲什麼與'events'兩次加入?你從不使用'events1'中的任何東西。 – Barmar 2014-08-27 17:31:58

+0

@Barmar我相信OP正試圖通過該連接刪除Cartesian Product ...而不是僅僅以正確的方式去做 – 2014-08-27 17:32:31

回答

3

你並不需要events加入兩次。

SELECT `events`.`DateTime`, `events`.`User`, `eventdetails`.`ItemName`, `eventdetails`.`ItemValue` 
FROM `eventdetails` 
INNER JOIN `events` ON `events`.`Event_ID` = `eventDetails`.`Event_ID` 
WHERE `events`.`PCBID` = 12946 
ORDER BY `events`.`DateTime` DESC; 

DEMO

+0

你的解決方案完美地工作,現在我明白我做錯了什麼(或者至少我認爲我是這樣做的)。感謝sqlfiddle的幫助和示例。 – delliottg 2014-08-27 17:45:28

+0

@delliottg barmars回答我在說什麼。你不應該'從事件細節,事件'...你應該有一個根表,並將其他表連接在一起。 – 2014-08-27 18:21:10

+0

明白了,謝謝。 – delliottg 2014-08-27 21:30:47

相關問題