當我使用兩個查詢時,一個被初始調用,第二個在第一個結果循環中被調用。我想結合這兩個查詢,但迄今爲止還沒有辦法。查詢從拉的表是:結合兩個select查詢
+--------------+ +--------------+ +--------------------------+
| table_1 | | table_2 | | table_3 |
+----+---------+ +----+---------+ +----+----------+----------+
| id | name | | id | name | | id | tbl1_id | tbl2_id |
+----+---------+ +----+---------+ +----+----------+----------+
| 1 | tbl1_1 | | 1 | tbl2_1 | | id | 1 | 1 |
| 2 | tbl1_2 | | 2 | tbl2_2 | | id | 3 | 2 |
| 3 | tbl1_3 | | 3 | tbl2_3 | | id | 3 | 3 |
| 4 | tbl1_4 | +----+---------+ +----+----------+----------+
+----+---------+
有一個許多人table_1
和table_3
table_2
之間一對多的關係。到目前爲止,我一直在使用分隔查詢。一個查詢返回table_1
的所有內容,第二個查詢返回連接到table_1
到table_3
的值table_2
。但是,我想廢除循環並減少發送到服務器的查詢數量。我一直在使用一個JOIN
嘗試:
SELECT table_1.id, table_1.name, table_2.id, table_2.name
FROM table_3
LEFT JOIN table_1 ON (table_3.tbl1_id = table_1.id)
LEFT JOIN table_1 ON (table_2.tbl2_id = table_2.id)
這回非常希望,我想,除了它只有返回均table_3
從table_1
留下了一些值的值。我試過使用子查詢:
SELECT table_1.id,
table_1.name,
(SELECT table_2.id FROM table_2, table_3 WHERE table_2.id = table_3.tbl2_id AND table_1.id = table_3.tbl1_id) AS tbl_2_id,
(SELECT table_2.name FROM table_2, table_3 WHERE table_2.id = table_3.tbl2_id AND table_1.id = table_3.tbl1_id) AS tbl_2_name
FROM table_1
這給了ERROR 1242
。到目前爲止,我還沒有能夠得到任何工作。我正在尋找的結果與此類似。
+---------------+---------------+---------------+---------------+
|table_1.id |table_1.name |table_2.id |table_2.name |
+---------------+---------------+---------------+---------------+
| 1 | tbl1_1 | 1 | tbl2_1 |
| 2 | tbl1_2 | | |
| 3 | tbl1_3 | 2 | tbl2_2 |
| 3 | tbl1_3 | 3 | tbl2_3 |
| 4 | tbl1_4 | | |
+---------------+---------------+---------------+---------------+
另外,我想可以訂購兩個table_1.name
和table_2.name
結果。如果有人有一個建議,請讓我知道。
如果table_1中沒有相應的條目,並且table_2中沒有相應條目的table_2中的行,是否希望包含table_1中的行?在這種情況下,您正在尋找MySql不支持的FULL OUTER JOIN。通過以一種方式進行外部聯接,您可以實現完全外部聯接。 – 2010-09-08 20:43:01