Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 可以像这样创建一个包含两个表中的行的查询吗?_Mysql_Sql - Fatal编程技术网

Mysql 可以像这样创建一个包含两个表中的行的查询吗?

Mysql 可以像这样创建一个包含两个表中的行的查询吗?,mysql,sql,Mysql,Sql,我想创建一个查询,它根据我可以很好地完成的几个条件从表中选择行。然而,我想弄清楚,如果记录的id在过去24小时内没有出现在另一个表中,如何只显示表中的行。我该怎么做像这样的事情,想象一下。想象一下桌子是这样的: ID . | EMAIL . | . PASS ------------- | --------------- | --------------- 1 . abc@abc.com . rgjoegeijerioge 2 .

我想创建一个查询,它根据我可以很好地完成的几个条件从表中选择行。然而,我想弄清楚,如果记录的id在过去24小时内没有出现在另一个表中,如何只显示表中的行。我该怎么做像这样的事情,想象一下。想象一下桌子是这样的:

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
                     )