0

我想在三个没有匹配列的表之间进行查询。我使用过UNION但它用 结果替换idDisplayNetwork和。idDeviceidCountryin

SELECT idcountry, 
       name 
FROM   country 
UNION 
SELECT iddevice, 
       name 
FROM   device 
UNION 
SELECT name, 
       iddisplaynetwork 
FROM   displaynetwork 

我想要这种输出

   { idCountry: '18ec1e07-9c89-4d2c-aefe-a7bd8966fab4',
    Name: 'Russia' },
   { idCountry: '31ceda51-9ce8-4380-bd41-c95f660e2ad4',
    Name: 'Turkey' },
   { idDevice: 'c0180c24-2df5-4082-b050-94dfaf1d5174',
    Name: 'Desktop and Laptops' },
  { idDisplayNetwork: '771434a0-0e6d-4206-90f5-f6abf85690d1',
    Name: 'search network' },

任何帮助将不胜感激。

4

3 回答 3

4

如果这些 ID 相同,则应重命名查询中的输出列,如下所示:

SELECT idcountry AS ID, 
       name 
FROM   country 
UNION 
SELECT iddevice AS ID, 
       name 
FROM   device 
UNION 
SELECT 
       iddisplaynetwork AS ID,
       name 
FROM   displaynetwork 

您刚刚发布的结果是不可能的,但是您可以执行以下操作:

SELECT idcountry AS ID, 
           name,
           'Country' AS Type
    FROM   country 
    UNION 
    SELECT iddevice AS ID, 
           name,
           'Device' AS Type
    FROM   device 
    UNION 
    SELECT 
           iddisplaynetwork AS ID,
           name,
           'Display Network' AS Type
    FROM   displaynetwork 

输出将是这样的:

{ ID: '18ec1e07-9c89-4d2c-aefe-a7bd8966fab4',
    Name: 'Russia', type: 'Country' },
   { ID: '31ceda51-9ce8-4380-bd41-c95f660e2ad4',
    Name: 'Turkey', type: 'Country' },
   { ID: 'c0180c24-2df5-4082-b050-94dfaf1d5174',
    Name: 'Desktop and Laptops', type: 'Device' },
  { ID: '771434a0-0e6d-4206-90f5-f6abf85690d1',
    Name: 'search network', type: 'Display Network' },
于 2013-06-27T08:42:39.730 回答
0

UNION 语句需要共享相同的列才能工作。正如指定的,第一条语句的列名用于其他结果集。

于 2013-06-27T08:22:20.430 回答
0

如果它们不共享相同的列(数据类型),则将结果集彼此附加是没有任何意义的。这是一个语义错误,与 MySQL 无关。

如果要连接每个表而不是附加结果,请使用JOIN语句 then。这假定所有表共享至少 1 个键以实现引用完整性。

例子

SELECT n.*, d.*, c.* FROM displaynetwork n
JOIN device d
ON n.name = d.name
JOIN country c
ON n.name = c.name

更新:

尝试UNION ALL代替UNION

更新:

有 2 个表,颜色和名称,名称(名称,随机数)和颜色(id,颜色),以下语句正是您的输出:

SELECT id, color FROM colors
UNION ALL
select randomNumber, name FROM names

所以对我来说,它不必是同一列的别名或名称。但我使用 MariaDB,不知道这是否表现不同。

于 2013-06-27T08:28:40.930 回答