mysql查询2个不同列的表?

时间:2013-01-18 21:11:15

标签: mysql

我正在尝试在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 
我不明白。有人可以帮忙吗

感谢

3 个答案:

答案 0 :(得分:2)

UNIONs(UNION和UNION ALL)要求所有UNION的查询都有:

  1. SELECT子句中的列数相同
  2. 列数据类型必须在每个位置匹配
  3. 在询问之前在stackoverflow中搜索。

    参考:The used SELECT statements have a different number of columns (REDUX!!)

答案 1 :(得分:0)

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

您需要将此作为两个单独的查询。

答案 2 :(得分: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”操作的查询时,每个查询的结果集必须匹配。