如何選擇符合以下條件的所有記錄:mysql:使用meeting_id = x記錄所有記錄,並且它的父項可用,但不關心它是否可用?
以meeting_id = x記錄所有記錄,並且它的父項可用或者沒有父項,但不在意是否可用本身?
table people:
id, name, address, meeting_id, available, parent_id
如何選擇符合以下條件的所有記錄:mysql:使用meeting_id = x記錄所有記錄,並且它的父項可用,但不關心它是否可用?
以meeting_id = x記錄所有記錄,並且它的父項可用或者沒有父項,但不在意是否可用本身?
table people:
id, name, address, meeting_id, available, parent_id
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))
我猜測,這個查詢將比聯接更快,但不是特別確定。 – 2010-10-31 17:24:59
感謝Roopesh它更簡單,運行良好:-) – m1k3y3 2010-10-31 18:50:07
未經測試,請嘗試。如果沒有父COALESCE將選擇第二PARAM和使用自動1.
SELECT * FROM people
WHERE
meeting_id=x AND
(COALESCE((SELECT available FROM people AS parent WHERE id=parent_id), 1))
我假設parent_id可以爲空 – 2010-10-31 17:07:35
是可以爲空,並且您的查詢可以完成這項工作。謝謝,我會閱讀更多關於coalesce – m1k3y3 2010-10-31 17:24:18
您可以用做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;
child.available不是必需的,因爲它不關心如果可用本身。 – 2010-10-31 17:23:18
你的意思是,「parent.id IS NULL」不是必需的嗎? – Kel 2010-10-31 17:36:40
不,我的意思是 - child.available = 1 – 2010-10-31 21:41:44
的CREATE TABLE語句將有助於,而不僅僅是列列表,因爲數據類型和選項(NULL或NOT NULL)將幫助我們能夠幫助您。 – 2010-10-31 17:05:46