2
我在解決這個問題時遇到了一些困難。我確定有一種解決方法,但我試圖使用單個查詢。我有兩個條件加入兩張桌子。我需要返回所有匹配't_id'的行(即使NULL)。我還需要僅加入匹配'e_id'的數據。如果'e_id'不存在,它應該返回NULL。下面的查詢返回所有我需要的行:如何正確地連接兩個mysql表的條件?
SELECT b.*, ev.* FROM blocks b
LEFT OUTER JOIN element_values ev ON ev.b_id = b.id
WHERE t_id = 1;
+----+------+-----------+-----+------+------+-----------------+
| id | t_id | type | pos | e_id | b_id | value |
+----+------+-----------+-----+------+------+-----------------+
| 1 | 1 | textinput | 1 | 1 | 1 | this is it edit |
| 2 | 1 | textinput | 0 | 1 | 2 | what is it |
| 5 | 1 | template | 2 | NULL | NULL | NULL |
+----+------+-----------+-----+------+------+-----------------+
但增加了對「E_ID」將返回準確的數據的另一個條件,但將排除第三行,如果它是NULL(當然)。
SELECT b.*, ev.* FROM blocks b
LEFT OUTER JOIN element_values ev ON ev.b_id = b.id
WHERE t_id = 1 AND e_id = 1;
+----+------+-----------+-----+------+------+-----------------+
| id | t_id | type | pos | e_id | b_id | value |
+----+------+-----------+-----+------+------+-----------------+
| 1 | 1 | textinput | 1 | 1 | 1 | this is it edit |
| 2 | 1 | textinput | 0 | 1 | 2 | what is it |
+----+------+-----------+-----+------+------+-----------------+
我正在尋找一個解決方案,如果'e_id'不存在,所有三行仍然返回。例如,對於最後一個查詢,當我傳遞'e_id = 2'時,該集合將爲空。但是,我需要它仍然返回所有等於't_id'的行。
任何想法都有幫助。
謝謝!
完美。謝謝Cybernate。 – Corey 2011-04-19 19:09:04