2015-11-11 28 views
0

首先,我要你告诉我的表:来自3个不同表格的SQL查询。

表用户

CREATE TABLE Users(
    EMAIL VARCHAR(40) NOT NULL); 

表操作

CREATE TABLE Actions 
    IDACCION INT NOT NULL, 
    ACCION VARCHAR(100) NOT NULL); 

表UserAction

CREATE TABLE UserAction(
    EMAIL VARCHAR(40) NOT NULL, 
    IDACCION INT NOT NULL, 
    DATETIME DATE NOT NULL, 
    FOREIGN KEY (IDACCION) REFERENCES Actions(IDACCION), 
    FOREIGN KEY (EMAIL) REFERENCES Users(EMAIL), 
    PRIMARY KEY (IDACCION, EMAIL, DATETIME)); 

然后,我需要的行动(来自Actions的ACCION)和DATETIME(来自UserAction的DATETIME)asocia与他交往,条件是电子邮件(来自用户)与行动电子邮件相同。可能吗?

如果是不可能的,我可以移动DATETIME行动表

回答

1

你真的需要构建你的表格,你的用户表没有主键和似乎没有对任何目的一个应用程序,这个查询甚至不需要用户表。

SELECT a.ACCION, ua.DATETIME FROM Actions a 
INNER JOIN UserAction ua on a.IDACCION = ua.IDACCION 
+0

对不起,我忘了包括这行。电子邮件是用户的主要关键,idaccion是行动的主要关键 –

1
select 
a.accion, 
ua.datetime 
from 
users u, 
actions a, 
useraction ua 
where 
u.email=ua.email 
and ua.idaccion=a.idaccion; 
+3

回答问题时请不要使用陈旧的语法。使用明确的'JOIN'。 –

+0

请研究JOIN子句,这将对您有所帮助。 – Adam92

+0

它的工作原理。现在我需要1件事。如何将DATETIME与两个作为参数传递进行比较?这里是日期格式:'yyyy/MM/dd hh24:mi:ss'...我需要显示所有日期介于作为参数传递的其他日期之间的情况。 –

1

请注意,datetime是MySQL的reserved word

你可以尝试以下方法:

SELECT aa.ACCION, bb.`DATETIME` 
FROM Actions AS aa 
INNER JOIN UserAction AS bb 
ON aa.IDACCION = bb.IDACCION 
INNER JOIN Users AS cc 
ON bb.EMAIL = cc.EMAIL; 
0

在回答第二个问题,是比较日期的,T-SQL包含一个函数调用DATEDIFF会比较日期比较好。我建议你看一下微软开发者网络的文章here