2013-08-26 19 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? –