如何编写这个简单的MySQL JOIN查询?

时间:2011-03-25 02:11:46

标签: mysql sql union

我需要从2个表中选择记录,一个名为城市,另一个名为邻域。它们共享一个共同的表列,名为 parent_state 。在此单元格中,存储父状态的id。

我需要选择属于某个州的所有城市和社区。例如,如果状态id为10,我需要为其parent_state单元格获取具有此值的所有城市和邻域。

状态id存储在PHP变量中,如下所示:

$ parent_state ='10';

此查询的外观如何(最好是两个表的合并结果应按字母顺序按名称列排序)?

修改

是的,我可能确实需要一个工会。我是mysql的新手,我现在所能做的就是单独查询表。

我总是可以单独查询城市和街区表格,但我想合并结果的原因仅仅是按字母顺序列出所述结果。

那么有人可以展示UNION对此的查询效果吗?

3 个答案:

答案 0 :(得分:1)

您想要的可能不是加入,而是union。请注意,union只能从两个连接的表达式中选择完全相同的列。

答案 1 :(得分:1)

使用:

SELECT c.name
  FROM CITIES c
 WHERE c.parent_state = 10
UNION ALL
SELECT n.name
  FROM NEIGHBORHOODS h
 WHERE n.parent_state = 10

UNION ALL将结果集作为单个结果集的两个查询的组合返回。 UNION会删除重复内容,并且速度较慢 - 这就是为什么UNION ALL是更好的选择,即使它不太可能有城市&同名的邻居。老实说,将两者混合起来听起来不是一个好主意,因为邻里是城市的一部分......

使用UNION要注意的其他事项是,对于所有UNION的查询,SELECT子句中需要有相同数量的列(这适用于UNIONUNION ALL) 。 IE:如果第一个查询在SELECT子句中有三列而第二个查询只有两列,则会出错。

此外,数据类型必须匹配 - 这意味着在同一位置不返回DATE / TIME数据类型是另一个返回INTEGER的查询。

答案 2 :(得分:0)

select * from city as c
inner join neighborhoods as n
on n.parent_state = c.parent_state
where c.parent_state=10

如果城市和社区没有关系数据,您可以使用左,右连接。