mysql - 参数未包含在先前SELECTed项目中的UNION项目

时间:2015-05-11 07:03:15

标签: php mysql

我正在从两个表格中选择一些项目 - table1table2

table1
id (primary) | user_id | group_id | name | description | active_from | active_to

table2
id (primary) | user_id | group_id | name | description | active_from

这些表中的每个项目都属于某个组。我用于显示项目的代码如下:

SELECT 'table1' AS table_name, id, user_id, group_id, name, description, active_from, active_to
FROM table1 WHERE user_id='".$user_id."'
UNION ALL
SELECT 'table2' AS table_name, id, user_id, group_id, name, description, active_from, null
FROM table2 WHERE user_id='".$user_id."'
ORDER BY group_id, name ASC

上面的代码为我提供了按{_ 1}}和table1分组的项目列表,这些项目按group_id分组(然后按名称分组)。组列表包含在表table2中。表groups的结构:

groups

但是,有些群组不包含group_id (primary) | user_id | group_name table1中的内容。我尝试添加到当前结果的是那些空组(以与项目相同的方式列出)并基于group_name对结果进行排序。

我尝试使用以下代码,这会引发“您的SQL语法中出现错误”:

table2
  1. 如何将空组添加到项目列表中(仅显示group_id和空行)?

  2. 如何显示group_name而不是group_id(并按group_name而不是group_id对结果进行排序)?

1 个答案:

答案 0 :(得分:-1)

您需要使用正确的括号分隔union all以获得更好的可见性。现在最后一个联合的条件都不正确,你可能需要left joinnot exists

(
  SELECT 
  'table1' AS table_name, 
  id, 
  user_id, 
  group_id, 
  name, 
  description, 
  active_from, 
  active_to
  FROM table1 
  WHERE user_id='".$user_id."'
)
 UNION ALL
(  
  SELECT 
  'table2' AS table_name, 
  id, 
  user_id, 
  group_id, 
  name, 
  description, 
  active_from, 
  null
  FROM table2 
  WHERE user_id='".$user_id."'
  ORDER BY group_id, name ASC
) 
 UNION ALL
(
  SELECT 
  'groups_empty' as table_name, 
  null, 
  null, 
  group_id, 
  null, 
  null, 
  null, 
  null 
  FROM groups 
  WHERE user_id='".$user_id."' 
  AND
  not exists(
    select 1 from table2 where table2.group_id = groups.group_id
  ) 
)