我想在三个没有匹配列的表之间进行查询。我使用了UNION
但是用结果idDisplayNetwork
替换了idDevice
和idCountryin
。
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' },
任何帮助将不胜感激。
答案 0 :(得分: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' },
答案 1 :(得分:0)
UNION statements 需要共享相同的列才能正常工作。 如指定的那样,第一个语句的列名称用于其他结果集。
答案 2 :(得分:0)
如果他们不共享相同的列(数据类型),则将结果集附加到彼此没有任何意义。这是一个语义错误,与MySQL无关。
如果要连接每个表而不是附加结果,请使用JOIN
语句。
这假定所有表共享至少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个表,颜色和名称,名称(名称,randomNumber)和颜色(id,颜色),以下语句正是您的输出:
SELECT id, color FROM colors
UNION ALL
select randomNumber, name FROM names
所以对我来说,它不一定是列的别名或名称。但是我使用MariaDB,不知道这是否有所不同。