我正在尝试在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
我不明白。有人可以帮忙吗
感谢
答案 0 :(得分:2)
UNIONs(UNION和UNION ALL)要求所有UNION的查询都有:
在询问之前在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”操作的查询时,每个查询的结果集必须匹配。