0

私は基本的に異なる列を持つ2つの異なるテーブルを使用して1つで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

クエリ結果のすべての行は同じ列である必要があります。これらの2つのクエリには同じ列がないため、このUNIONように組み合わせることはできません。

これは、2つの別々のクエリとして実行する必要があります。

于 2013-01-18T21:13:24.820 に答える
0

クエリは結果セットを返します。これは、結果セットの列数と各列のデータ型によって「定義」されます。

UNIONまたはUNIONALL操作は、2つの結果セットを一緒に「追加」するように設計されています。そのためには、2つのクエリの結果セットが、返される列の数に関して同一である必要があり、各列のデータ型も同じである必要があります。

結果セットが少しずれている場合は、クエリを少しファッジして、結果セットを一致させることができます(列プレースホルダーとしていくつかのリテラルを追加します)

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

列の名前(または列または式に割り当てられたエイリアス)は重要ではないことに注意してください。ここで重要なのは、両方のクエリが5つの列を返し、各列の位置のデータ型が次のように一致することです:VARCHAR、VARCHAR、VARCHAR、INT、INT


SQLステートメントを開発するときは、返される結果セットを定義することが重要です。列の数、および各列のデータ型。

「UNION」または「UNIONALL」操作を使用するクエリを開発する場合、各クエリの結果セットは一致する必要があります。

于 2013-01-18T21:41:50.040 に答える