0

我正在尝试在 1 中进行 2 个查询,基本上使用 2 个具有不同列的不同表。我试过这个:

SELECT * FROM $TIMES_TABLE WHERE uid='$contextUser' AND submitstatus=1 UNION SELECT first_name, last_name, employid, manager FROM $USER_TABLE WHERE username='$contextUser'

但我收到此错误:

Can't perform query: The used SELECT statements have a different number of columns 

我不明白。有人可以帮忙吗

谢谢

4

3 回答 3

2

UNION(UNION 和 UNION ALL)要求所有被 UNION 的查询具有:

  1. SELECT 子句中的列数相同
  2. 列数据类型必须在每个位置匹配

在询问之前在stackoverflow中搜索。

参考:使用的 SELECT 语句具有不同的列数(REDUX !!)

于 2013-01-18T21:14:41.570 回答
0

查询结果中的所有行必须具有相同的列。由于这两个查询没有相同的列,因此它们不能UNION像这样组合使用。

您需要将其作为两个单独的查询来执行。

于 2013-01-18T21:13:24.820 回答
0

查询返回一个结果集,该结果集由结果集中的列数和每列的数据类型“定义”。

UNION 或 UNION ALL 操作旨在将两个结果集“附加”在一起;为了做到这一点,两个查询的结果集在返回的列数方面必须相同,并且每列的数据类型也必须相同。

有时,当结果集稍微偏离一点时,我们可以稍微捏造查询,以使结果集匹配(添加一些文字作为列占位符)

SELECT 'u'                 AS source
     , u.first_name        AS first_name
     , u.last_name         AS last_name 
     , u.employid          AS employid
     , u.manager           AS manager 
  FROM $USER_TABLE u
 WHERE u.username='$contextUser'
 UNION ALL
SELECT 't'                 AS source
     , t.some_string       AS first_name
     , t.some_otherstring  AS last_name 
     , 0                   AS employid
     , 0                   AS manager
  FROM $TIMES_TABLE t 
 WHERE t.uid='$contextUser'
   AND t.submitstatus=1

请注意,列的名称(或分配给列或表达式的别名)并不重要;这里重要的是两个查询都返回五列,并且每列位置的数据类型匹配:VARCHAR、VARCHAR、VARCHAR、INT、INT


在开发 SQL 语句时,定义要返回的结果集很重要。有多少列,以及每列的数据类型。

在开发使用“UNION”或“UNION ALL”操作的查询时,每个查询的结果集必须匹配。

于 2013-01-18T21:41:50.040 回答