Mysql 可以像这样创建一个包含两个表中的行的查询吗?
我想创建一个查询,它根据我可以很好地完成的几个条件从表中选择行。然而,我想弄清楚,如果记录的id在过去24小时内没有出现在另一个表中,如何只显示表中的行。我该怎么做像这样的事情,想象一下。想象一下桌子是这样的:Mysql 可以像这样创建一个包含两个表中的行的查询吗?,mysql,sql,Mysql,Sql,我想创建一个查询,它根据我可以很好地完成的几个条件从表中选择行。然而,我想弄清楚,如果记录的id在过去24小时内没有出现在另一个表中,如何只显示表中的行。我该怎么做像这样的事情,想象一下。想象一下桌子是这样的: ID . | EMAIL . | . PASS ------------- | --------------- | --------------- 1 . abc@abc.com . rgjoegeijerioge 2 .
ID . | EMAIL . | . PASS
------------- | --------------- | ---------------
1 . abc@abc.com . rgjoegeijerioge
2 . ab46c@abc.com . dgnkjrkjhrnjkrt
3 . ab46c@abc.com . etjhrnkrjkjhjhr
------------- | --------------- | --------------- | ---------------
transferID . ACCOUNT . ACCOUNTTO . ITEM
------------- | --------------- | --------------- | ---------------
1 . abc@abc.com . rjek@xs.com . book1
2 . ab4gtrc@abc.com . xbjk@abc.com book2
3 . ab46gggc@abc.com bca@lo.com book2
因此,我希望从第一个表中获取所有行,如果我更改了表结构,则电子邮件/用户或甚至用户ID不是在过去24小时内添加到第二个表中的行的一部分。您可以使用“不存在”
假设在表2中有一个名为insertion\u date的列,则可以使用NOT EXISTS
假设在表2中有一个名为insertion\u date的列,可以使用左联接,假设第一个表是表1,第二个表是表2
第二种情况
--We want to check `email` against `account` and `accountto`:
SELECT
table_1.*
FROM
table_1
LEFT JOIN table_2
ON table_1.Email = table_2.Account OR table_1.Email = table_2.AccountTo
WHERE
table_2.TransferID IS NULL
下面是db小提琴:
可以使用左联接,假设第一个表是表1,第二个表是表2
第二种情况
--We want to check `email` against `account` and `accountto`:
SELECT
table_1.*
FROM
table_1
LEFT JOIN table_2
ON table_1.Email = table_2.Account OR table_1.Email = table_2.AccountTo
WHERE
table_2.TransferID IS NULL
下面是db小提琴:
另一种方法是连接,如Himanshu所述: 桌子 质疑 结果
示例:另一种方法是像Himanshu提到的那样连接: 桌子 质疑 结果
示例:您需要在第二个表中有一个时间戳
select * from table1
where id not in (
Select id from table2
where date >= now() - INTERVAL 1 DAY
)
您需要在第二个表中有一个时间戳
select * from table1
where id not in (
Select id from table2
where date >= now() - INTERVAL 1 DAY
)
提示:join…..在添加记录时,您的第二个表会丢失时间戳,从而使之成为可能。目前还不清楚这些记录是如何关联的——是否应该匹配电子邮件和帐户?或者accountto?哦,是的,在我的真实表格中,我知道我需要一个日期栏,我忘了在这个问题中添加。对不起。是的,电子邮件和帐户应该匹配。Thanks@KmanOfficial11你得到了一些很好的回答。您可能希望通过将答案标记为“已接受”来结束您的问题,因为其他用户知道您的问题有可接受的答案。提示:join…..添加记录时,您的第二个表会错过时间戳,从而使此操作成为可能。目前还不清楚这些记录是如何关联的——是否应该匹配电子邮件和帐户?或者accountto?哦,是的,在我的真实表格中,我知道我需要一个日期栏,我忘了在这个问题中添加。对不起。是的,电子邮件和帐户应该匹配。Thanks@KmanOfficial11你得到了一些很好的回答。您可能希望通过将答案标记为已被其他用户接受来结束您的问题,因为其他用户知道您的问题有可接受的答案。因为人们更喜欢使用其他网站,例如,主办演示。但这是我首选的实现方法,因为它避免了结果中每一行的子查询开销。谢谢@Nick。我不知道。因为人们更喜欢使用其他网站,比如说,来主持演示。但这是我首选的实现方法,因为它避免了结果中每一行的子查询开销。谢谢@Nick。我不知道那件事。
select u.id, u.email
from userinfo u
left join transfers t
on u.email = t.account
and t.created_date >= date_sub(now(), interval 24 hour)
where t.transferid is not null;
id email
1 abc@abc.com
2 xyz@abc.com
select * from table1
where id not in (
Select id from table2
where date >= now() - INTERVAL 1 DAY
)