来自3个不同表的SQL查询。

时间:2015-11-11 22:53:20

标签: mysql sql database

首先,我希望你展示我的表格:

表用户

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),其中条件是电子邮件(来自用户)与Action电子邮件相同。有可能吗?

如果无法实现,我可以将DATETIME移动到Action表

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您确实需要构建表,您的Users表没有主键,并且似乎没有任何用途,因为此查询甚至不需要Users表。

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

答案 2 :(得分: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;

答案 3 :(得分:0)

在回答第二个问题时,比较日期,T-SQL包含一个名为DATEDIFF的函数,它可以很好地比较日期。我建议你看一下Microsoft Developer Network的文章here