我试图找出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之后处于非活动状态的客户列表
答案 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
)