我正忙着为我的一个项目构建一个有效的SQL语句。首先,我有一个“问题”表和一个“响应”表。响应表通过名为“question_id”的外来ID(与问题“id”相关联)与问题表相关联。一个问题不一定得有回应,但我能提出的唯一有效的陈述只会提出一个有回应的问题,但我需要它来表明每个问题是否有回应。
该SQL语句是:
SELECT u.firstname, q.question, r.tutor_id, r.response FROM response r
JOIN question q ON q.id = r.question_id
JOIN user u ON u.id = q.user_id
我的另一个问题是我也试图拉出导师的名字,但只能拉“tutor_id”,所以任何帮助都会很棒。如果有人有任何提示,我会很感激!
适用于:
SELECT u.firstname, q.question, v.firstname, r.response
FROM question q
INNER JOIN user u ON u.id = q.user_di
LEFT JOIN response r ON q.id = r.question_id
LEFT JOIN user v ON v.id = r.tutor_id
答案 0 :(得分:3)
您正在寻找LEFT JOIN
而不是内部联接。这将返回第一个表上的所有值,无论它是否与第二个表中的值相匹配。
至于问题二,看起来你需要一个导师表来加入才能得到这个名字。是否存在?
SELECT u.firstname, q.question, r.tutor_id, r.response, u2.firstname AS TutorName FROM response r
LEFT JOIN question q ON q.id = r.question_id
JOIN user u ON u.id = q.user_id
JOIN user u2 on u2.id = r.tutor_id
答案 1 :(得分:1)
INNER JOIN将剔除任何非加入数据。改为使用LEFT JOIN,您将从“左侧”获得所有行。
SELECT
u.firstname,
q.question,
r.tutor_id,
r.response
FROM
question q // left hand side
INNER JOIN user u // assumes all questions have a user
ON u.id = q.user_id
LEFT JOIN response r
ON q.id = r.question_id
导师姓名存放在哪里?
好的,我不确定为什么其他一些解决方案不适合你,但你可以做这样的事情来包括导师名字:
SELECT
u.firstname,
q.question,
T.tutor_id,
T.firstname,
T.response
FROM
question q // left hand side
INNER JOIN user u // assumes all questions have a user
ON u.id = q.user_id
LEFT JOIN (
SELECT
r.response,
r.question_id,
r.tutor_id
u2.firstname
FROM
response r
INNER JOIN user u2
ON r.tutor_id = u2.id // Is there a user type we can also join on?
) T
ON q.id = T.question_id
答案 2 :(得分:0)
SELECT u.firstname, q.question, r.tutor_id, r.firstname as tutorname, r.response FROM
response r RIGHT JOIN (question q INNER JOIN user u ON u.id = q.user_id)
ON q.id = r.question_id
答案 3 :(得分:0)
给它一个机会。我不知道tutor_id加入了什么,但我认为它是用户ID?
SELECT u.firstname, q.question, v.firstname, r.response FROM question q
LEFT JOIN q ON q.id = r.question_id
LEFT JOIN user u ON u.id = q.user_id
LEFT JOIN user v ON v.id = r.tutor_id
看到我抓住了回答的用户的名字(我认为)。我做了那个v(区别于用户你)。
编辑:我有点假设“导师”只是另一个回答问题的用户。