[英]Combining two select queries
在我使用兩個查詢的那一刻,首先調用一個,然后在循環訪問第一個查詢的結果期間調用第二個。 我想合並兩個查詢,但到目前為止還無法完成。 查詢從中提取的表是:
+--------------+ +--------------+ +--------------------------+
| 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_3
table_1
和table_2
之間存在多對多關系。 到目前為止,我一直在使用單獨的查詢。 一個查詢返回table_1
所有內容,第二個查詢返回通過table_3
連接到table_1
的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_3
了table_1
某些值之外,這返回了我想要的table_3
。 我嘗試使用子查詢:
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_2.name
。 如果有人有建議,請告訴我。
要從table_1中獲取其他表中不匹配的行,應使用OUTER JOIN而不是INNER JOIN:
SELECT
table_1.id,
table_1.name,
table_2.id,
table_2.name
FROM table_1
LEFT JOIN table_3 ON table_3.tbl1_id = table_1.id
LEFT JOIN table_2 ON table_3.tbl2_id = table_2.id
結果:
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' ''
因此,您只是想打印出所有相關對? 怎么樣:
SELECT table_1.id, table_1.name, table_2.id, table_2.name
FROM table_3
INNER JOIN table_1 ON table_1.id = table_3.tbl1_id
INNER JOIN table_2 ON table_2.id = table_3.tbl2_id
ORDER BY table_1.id, table_2.id
將LEFT JOIN
更改為RIGHT JOIN
以及兩個聯接在查詢中出現的順序解決了此問題。 這是工作代碼的副本;
SELECT table_1.id,
table_1.name,
table_2.id,
table_2.name
FROM table_3
RIGHT JOIN table_2 ON (table_3.tbl2_id = table_2.id)
RIGHT JOIN table_1 ON (table_3.tbl1_id = table_1.id)
ORDER BY table_1.name ASC, table_2.name ASC;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.