在1个mysql中组合2个select查询

时间:2013-08-22 07:11:08

标签: mysql sql database

我试图找出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

一般来说,我需要的是第一个查询给出了在01-01-2011之前创建的客户列表。

和第二个查询列出了在01-01-2011之后没有订单的人员。

我想要的输出是客户名单,其创建时间是01-01-2011之前,并且在01-01-2011之后没有订购。

如果你能帮助我,我真的很感激。

忘了提两个表中的custid是一样的。

感谢。

- 编辑:为了更清楚一点,许多客户的创建时间是在2011年1月1日之前仍处于活动状态,我只想要在01-01-2011之后处于非活动状态的客户列表

5 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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' )

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

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

答案 3 :(得分: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'

答案 4 :(得分: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
     )