2010-10-31 29 views
0

如何選擇符合以下條件的所有記錄:mysql:使用meeting_id = x記錄所有記錄,並且它的父項可用,但不關心它是否可用?

以meeting_id = x記錄所有記錄,並且它的父項可用或者沒有父項,但不在意是否可用本身?

table people: 
id, name, address, meeting_id, available, parent_id 
+2

的CREATE TABLE語句將有助於,而不僅僅是列列表,因爲數據類型和選項(NULL或NOT NULL)將幫助我們能夠幫助您。 – 2010-10-31 17:05:46

回答

1
select * from people outt 
    where meeting_id = x and 
    (parent_id is null or exists (select 1 from people inn where inn.id = outt.parent_id and available = 1)) 
+0

我猜測,這個查詢將比聯接更快,但不是特別確定。 – 2010-10-31 17:24:59

+0

感謝Roopesh它更簡單,運行良好:-) – m1k3y3 2010-10-31 18:50:07

1

未經測試,請嘗試。如果沒有父COALESCE將選擇第二PARAM和使用自動1.

SELECT * FROM people 
    WHERE 
    meeting_id=x AND 
    (COALESCE((SELECT available FROM people AS parent WHERE id=parent_id), 1)) 
+0

我假設parent_id可以爲空 – 2010-10-31 17:07:35

+0

是可以爲空,並且您的查詢可以完成這項工作。謝謝,我會閱讀更多關於coalesce – m1k3y3 2010-10-31 17:24:18

0

您可以用做JOIN:

SELECT 
    child.*, 
    parent.name 
FROM 
    people child 
LEFT JOIN 
    people parent on (child.parent_id = parent.id) 
WHERE 
    (parent.available = 1 or parent.id IS NULL) AND 
    child.meeting_id = x; 

http://dev.mysql.com/doc/refman/5.0/en/join.html的細節

+0

child.available不是必需的,因爲它不關心如果可用本身。 – 2010-10-31 17:23:18

+0

你的意思是,「parent.id IS NULL」不是必需的嗎? – Kel 2010-10-31 17:36:40

+0

不,我的意思是 - child.available = 1 – 2010-10-31 21:41:44

相關問題