MySQL 查询有多个连接但一次只连接一个 table
MySQL query with multiple joins but only join one table at a time
现在我有 3 个表,user
、question
和 answer
。并且想在一次查询中查询到用户的问题和答案。我试过 left join 但结果不是我所期望的。这是 SQL:
SELECT user.id, question.id as question, answer.id as answer
FROM user
LEFT JOIN question ON user.id = question.user_id
LEFT JOIN answer ON user.id = answer.user_id
where user.id = 1;
结果是这样的:
+------+----------+--------+
| id | question | answer |
+------+----------+--------+
| 1 | 99 | 10 |
+------+----------+--------+
| 1 | 99 | 11 |
+------+----------+--------+
| 1 | 99 | 12 |
+------+----------+--------+
| 1 | 100 | 10 |
+------+----------+--------+
| 1 | 100 | 11 |
+------+----------+--------+
| 1 | 100 | 12 |
+------+----------+--------+
如果用户有很多问题和答案,将极大地影响性能。
我期望的是这样的:
+------+----------+--------+
| id | question | answer |
+------+----------+--------+
| 1 | 99 | NULL |
+------+----------+--------+
| 1 | 100 | NULL |
+------+----------+--------+
| 1 | NULL | 10 |
+------+----------+--------+
| 1 | NULL | 11 |
+------+----------+--------+
| 1 | NULL | 12 |
+------+----------+--------+
这意味着 user 1
有 2 个问题和 3 个答案。
我怎样才能在一个查询中得到这个结果?或者需要用 2 个查询分开,一个用 question
连接,一个用 answer
?
连接
非常感谢!!
SELECT user.id, question.id as question, answer.id as answer
FROM user
FULL OUTER JOIN question ON user.id = question.user_id
FULL OUTER JOIN answer ON user.id = answer.user_id
where user.id = 1;
我认为您需要的是完全外部联接。
您可以合并这 2 个表的结果
SELECT q.user_id as id, q.id AS question, NULL AS answer FROM question q WHERE q.user_id = 1
UNION ALL
SELECT a.user_id, NULL, a.id FROM answer a WHERE a.user_id = 1
现在我有 3 个表,user
、question
和 answer
。并且想在一次查询中查询到用户的问题和答案。我试过 left join 但结果不是我所期望的。这是 SQL:
SELECT user.id, question.id as question, answer.id as answer
FROM user
LEFT JOIN question ON user.id = question.user_id
LEFT JOIN answer ON user.id = answer.user_id
where user.id = 1;
结果是这样的:
+------+----------+--------+
| id | question | answer |
+------+----------+--------+
| 1 | 99 | 10 |
+------+----------+--------+
| 1 | 99 | 11 |
+------+----------+--------+
| 1 | 99 | 12 |
+------+----------+--------+
| 1 | 100 | 10 |
+------+----------+--------+
| 1 | 100 | 11 |
+------+----------+--------+
| 1 | 100 | 12 |
+------+----------+--------+
如果用户有很多问题和答案,将极大地影响性能。
我期望的是这样的:
+------+----------+--------+
| id | question | answer |
+------+----------+--------+
| 1 | 99 | NULL |
+------+----------+--------+
| 1 | 100 | NULL |
+------+----------+--------+
| 1 | NULL | 10 |
+------+----------+--------+
| 1 | NULL | 11 |
+------+----------+--------+
| 1 | NULL | 12 |
+------+----------+--------+
这意味着 user 1
有 2 个问题和 3 个答案。
我怎样才能在一个查询中得到这个结果?或者需要用 2 个查询分开,一个用 question
连接,一个用 answer
?
非常感谢!!
SELECT user.id, question.id as question, answer.id as answer
FROM user
FULL OUTER JOIN question ON user.id = question.user_id
FULL OUTER JOIN answer ON user.id = answer.user_id
where user.id = 1;
我认为您需要的是完全外部联接。
您可以合并这 2 个表的结果
SELECT q.user_id as id, q.id AS question, NULL AS answer FROM question q WHERE q.user_id = 1
UNION ALL
SELECT a.user_id, NULL, a.id FROM answer a WHERE a.user_id = 1