繁体   English   中英

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

[英]SQL query from 3 different tables.

首先,我希望您显示我的桌子:

表用户

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));

然后,我需要获取与他相关联的动作(来自动作的ACCION)和DATETIME(来自UserAction的DATETIME),条件是该电子邮件(来自用户)与动作电子邮件相同。 可能吗?

如果不可能,我可以将DATETIME移到Action表中

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

您确实需要构造表,Users表没有主键,并且在应用程序上似乎没有任何用途,因为此查询甚至不需要Users表。

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

注意datetime是MySQL的保留字

您可以尝试以下方法:

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;

为了回答第二个问题,即比较日期,T-SQL包含一个称为DATEDIFF的函数,它将很好地比较日期。 建议您在此处查看Microsoft开发人员网络文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM