2013-08-26 17 views
1

如何获得全部订单的名单表中除了MySQL的连接语句 - 在同一个表中引用现场

顺序表(已被引用和-1的类型订单):

id | reference_id | type 
---------------------------------- 
1 |     | 1 
---------------------------------- 
2 |     | 1 
---------------------------------- 
3 | 1    | -1 
---------------------------------- 

像这样:

list = ArrayList(); 

if(order.type > 0){ 
    if(order.id != other_order.reference_id) 
     list.add(order) 
} 

如何在MySQL声明中做到这一点?

也是这个语句的结果相同,但使用JOIN ....等:

select * from orders as a 
where a.type > 0 AND not exists 
(select * from orders as b where a.id = b.ref_id) 

感谢

+0

你用什么语言来访问mysql? java吗?你有尝试过什么吗? –

+0

语言不重要,我只需要SQL语句(仅查询) –

+0

为什么订单表似乎引用自己? –

回答

1

这会给你的引用的记录和有效的记录

SELECT * 
FROM yourtable A 
     INNER JOIN yourtable B 
       ON A.reference_id = B.order_id 
WHERE B.reference_type > 0; 
+0

skv,我编辑了我的问题(提供了SELECT语句)在这里试试吧:http://www.sqlfiddle.com/#!2/1ee6e/20 –

1

您正在寻找这样的:

select * from orders 
where not exists 
(select * from orders o where o.id = o.reference_id and type = -1) 
+0

是的,但是有可能使用JOIN ...等来重写它吗?以避免选择2x –

+0

做两个选择没有问题。 MySql将生成一个快速的计划来运行查询。 – dcaswell

+0

正确的SELECT语句是在问题中,如何重写它使用JOIN? –