0

我试图弄清楚 1 个查询很长一段时间。我是 mysql 和查询语句的新手。我有以下 2 个查询,我想将它们传递到 1 个语句中,以便获得所需的输出。

第1部分

select custid, fname from customertbl where createdate < 01-01-2011

第2部分

select custid, orddate from ordertbl where orddate < 01-01-2011

一般来说,我需要的是第一个查询给了我在 2011 年 1 月 1 日之前创建的客户列表。

第二个查询给出了谁在 01-01-2011 之后没有下订单的列表。

我想要的输出是创建日期在 2011 年 1 月 1 日之前并且在 2011 年 1 月 1 日之后没有下过任何订单的客户列表。

如果你能帮助我解决这个问题,我将不胜感激。

忘了提到两个表中的 custid 相同。

谢谢。

--编辑:为了更清楚一点,许多创建日期在 2011 年 1 月 1 日之前的客户仍然活跃,我只想要 2011 年 1 月 1 日之后不活跃的客户列表

4

5 回答 5

1

尝试这个

SELECT usr.custid, usr.fname, od.orddate
    FROM customertbl usr
    JOIN ordertbl od ON od.custid = usr.custid
    WHERE usr.createdate < '01-01-2011' AND od.orddate < '01-01-2011'
于 2013-08-22T07:17:08.167 回答
1
SELECT usr.custid, usr.fname
    FROM customertbl usr
    WHERE usr.createdate < '01-01-2011' 
    AND NOT EXISTS ( select 1 from orderdate where custid = usr.custid and orddate > '01-01-2011' )

我刚刚阅读了您的编辑,您似乎想知道在 2011 年 1 月 1 日之前创建并且在该日期之后没有下任何订单的客户。这简化了事情并且不需要加入,除非您需要查看他们的最后订单日期

于 2013-08-22T07:37:18.807 回答
0

利用JOIN

SELECT c.custid, c.fname, o.orddate from customertbl c
JOIN ordtbl o ON c.custid = o.custid
WHERE c.orddate < '01-01-2011' AND c.createdate < '01-01-2011'
于 2013-08-22T07:18:06.477 回答
0
SELECT c.custid, c.fname FROM customertbl c 
LEFT JOIN ordertbl o ONc.custid=o.custid 
WHERE createdate < 01-01-2011 AND orddate < 01-01-2011

编辑:对于在该日期之后没有订单的客户:

 SELECT c.custid, c.fname FROM customertbl c 
WHERE createdate < 01-01-2011 
AND (SELECT Count(*) FROM ordertbl WHERE custid=c.custid AND orddate>01-01-2011)=0
于 2013-08-22T07:15:11.097 回答
0

用这个:

select custid, fname 
from customertbl 
where createdate < 01-01-2011 and custid not in (
         select custid
         from ordertbl 
         where orddate > 01-01-2011
     )

或者您可以使用性能更好的这个:

select custid, fname 
from customertbl 
where createdate < 01-01-2011 and not exist (
         select custid
         from ordertbl 
         where orddate > 01-01-2011
         And customertbl.custid=ordertbl.custid
     )
于 2013-08-22T07:52:28.383 回答