MySQL - 这在一个查询中是否可行?

时间:2009-10-30 21:10:39

标签: sql mysql

我目前正在运行以下查询:

来自人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'的事实后进行单独选择?

4 个答案:

答案 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上加入两个表,并且只使用一个查询。