我目前正在运行以下查询:
来自人WHERE id = 4;
的SELECT *在下表中:
id name state age
-----------------------------------
1 tony jones CA 22
2 Sue Smith FL 50
3 Alex Guam AL 44
4 tony jones SC 32
5 tony jones OH 12
6 alex guam RI 33
7 tony Jones CO 17
我还想返回一个以该名字命名的其他州的名单。
所以在我的查询示例中,我有“tony jones”的id 4 - 我还应该收到CA,OH,CO的“other_states”列表。
是否有可能在一个查询中或者我需要在基于'name'的事实后进行单独选择?
答案 0 :(得分:5)
这将为您提供所需内容:
select t.id,
t.name,
t.age,
t.group_concat(distinct t.state order by t.state separator ', ') as other_states
from the_table t
inner join the_table u on t.name = u.name
where u.id = 4
group by t.id, t.name, t.age
答案 1 :(得分:1)
SELECT p1.* from people p1
JOIN people p2 ON p1.name = p2.name
WHERE p2.id = 4
将返回与给定名称匹配的所有行。
答案 2 :(得分:0)
使用第二个选择。您可以使用临时表和连接来解决问题,但使用类似的查询来获取所需信息是没有意义的。
答案 3 :(得分:0)
一种方法是将表连接到自身,匹配名称。更好的方法是将个人的记录(姓名和年龄)分开并将其放在另一个表中。然后使此表包含您刚创建的人员表中的ID号。然后,您可以在人员记录ID上加入两个表,并且只使用一个查询。