有一个表message
和一个表sender
,我想检索与特定ID相关的所有“消息信息”,以及发件人姓名和电子邮件。我有这个问题:
SELECT
a.id,
a.subject,
a.body,
a.sender_id,
(
SELECT b.name
FROM sender b
WHERE b.id = a.sender_id
LIMIT 1
) AS sender_name,
(
SELECT b.email
FROM sender b
WHERE b.id = a.sender_id
LIMIT 1
) AS sender_email,
a.sent_time
FROM message a
WHERE a.id = <id>
LIMIT 1;
它可以工作,但它必须对同一个表执行两个不同的SELECT子查询。 在这种情况下(这是一个极其简化的例子)它可能根本不会损害性能,但在现实情况下,必须从外部表中检索很多字段,最好的方法是使用JOIN语句?是否有可能有一个SELECT子查询来检索许多字段?
答案 0 :(得分:4)
只需在sender
子句中加入FROM
表。
SELECT a.id,
a.subject,
a.body,
a.sender_id,
b.name,
b.email,
a.sent_time
FROM message a
INNER JOIN
sender b
ON b.id = a.sender_id
WHERE a.id = <id>
LIMIT 1;
答案 1 :(得分:0)
试试这个:
SELECT
a.id,
a.subject,
a.body,
a.sender_id,
b.name AS sender_name,
b.email AS sender_email,
a.sent_time
FROM message a, sender b
WHERE a.id = <id>
AND b.id = a.sender_id
LIMIT 1;
答案 2 :(得分:0)
如果您真的不想使用加入,可以在子查询CONCAT(b.name,";",b.email)
中使用concat,然后在;
上展开结果 - 但我会去加入:d