2014-08-27 52 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

相关问题