当我使用两个查询时,一个被初始调用,第二个在第一个结果循环中被调用。我想结合这两个查询,但迄今为止还没有办法。查询从拉的表是:结合两个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