select b.id_no,b.name,b.visit_date,a.item_name as mc,a.amount,a.units
from bill_detail a, bill_master b
where a.bill_no=b.bill_no
and b.visit_date>=to_date('2011-10-01','yyyy-mm-dd')
and a.item_name<>'白炽灯'
and not exists ( select 1 from bill_orders
where order_text=a.item_name
and id_no=b.id_no
and ( stop_date_time is null or
( r_indicator='0'
and start_date_time>=to_date('2011-10-01','yyyy-mm-dd')
) ) )
order by mc
补充:bill_master.bill_no一对多bill_detail.bill_no,id_no一对一name
运行select b.id_no,b.name,b.visit_date,a.item_name as mc,a.amount,a.units
from bill_detail a inner join bill_master b on a.bill_no=b.bill_no
同样报错,最后加‘;’也不行
LEFT OUT JOIN
问题出在这里,改为inner join
谢谢!按你说的在sql数据库测试通过。
但我后台是oracle 用pl/sql developer 运行以上sql语句报错ora00933:sql命令不正确结束,好像inner join有问题,以下是生产库部分代码,表结构:bill_master.bill_no,id_no,name,visit_date;bill_detail.bill_no,item_no,amount,unit;orders.id_no,order_text,start_date_time,stop_date_time,r_indicator('1'为失效记录、0有效),找出 bill_detail(300万条)比orders(250万条)多出的记录,麻烦专家再看看问题出在哪:
select b.id_no,b.name,b.visit_date,a.item_name as mc,a.amount,a.units
from bill_detail a inner join bill_master b on a.bill_no=b.bill_no
where not exists (
select 1 from bill_orders
where order_text=a.item_name
and id_no=b.id_no
and b.visit_date>=to_date('2011-10-01','yyyy-mm-dd')
and a.item_name<>'白炽灯'
and (
stop_date_time is null or
(
r_indicator='0'
and start_date_time>=to_date('2011-10-01','yyyy-mm-dd')
)
)
)
order by mc
select t1.name,t3.* from tb1 as t1 inner join tb3 as t3 on t1.id=t3.id
where t3.id in( select id from ((select id from tb3) except (select id from tb2)) as exceptid )
我这样做怎么不行?如下:
select tb3.*,tb1.name from tb1 LEFT OUT JOIN tb3 on tb1.id=tb3.id
where not exists(
select 1 from tb2 where tb3.id=tb2.id
and tb3.f1=tb2.f1
and tb3.f2=tb2.f2
)