SELECT stat.bug_num,
stat.build_id
FROM bug_status stat
WHERE stat.build_id = 3
OR stat.closed_to IN
(SELECT stat2.bug_num
FROM bug_status stat2
WHERE stat2.build_id = 3
)
;
(也有可能與JOIN要做到這一點,或與JOIN和UNION,但我相信上面是最直觀的方式。)
編輯補充:這裏是一個MySQL轉錄物證實以上:
mysql> create table bug_status
-> (bug_num numeric, build_id numeric, closed_to numeric);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into bug_status values (1, 3, null);
Query OK, 1 row affected (0.00 sec)
mysql> insert into bug_status values (2, 4, null);
Query OK, 1 row affected (0.01 sec)
mysql> insert into bug_status values (3, null, 1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into bug_status values (4, 3, null);
Query OK, 1 row affected (0.00 sec)
mysql> insert into bug_status values (5, null, 2);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT stat.bug_num,
-> stat.build_id
-> FROM bug_status stat
-> WHERE stat.build_id = 3
-> OR stat.closed_to IN
-> (SELECT stat2.bug_num
-> FROM bug_status stat2
-> WHERE stat2.build_id = 3
-> )
-> ;
+---------+----------+
| bug_num | build_id |
+---------+----------+
| 1 | 3 |
| 3 | NULL |
| 4 | 3 |
+---------+----------+
3 rows in set (0.00 sec)
編輯補充,因爲IN (...)
的做法似乎並沒有在OP的版本的MySQL的工作:下面是給出了同樣結果的替代查詢:
SELECT stat.bug_num,
stat.build_id
FROM bug_status stat
LEFT
OUTER
JOIN bug_status stat2
ON stat.closed_to = stat2.bug_num
WHERE stat.build_id = 3
OR stat2.build_id = 3
;
要澄清,「關閉」不是構建ID,它是一個錯誤號。 – pennstatephil