我有一个错误“使用的select语句有不同的列数”
我的问题
SELECT
* FROM
inventory
WHERE
barcode1 = 'DR963560860GYYQBKBBD2'
OR barcode2 = 'DR963560860GYYQBKBBD2'
OR barcode3 = 'DR963560860GYYQBKBBD2'
OR barcode4 = 'DR963560860GYYQBKBBD2' UNION
SELECT
p.id AS 'PartId',
m.`Name` AS 'Model',
c.`Name` AS 'Color',
pt.`Name` AS 'PartType'
FROM
inventory i
JOIN part p ON p.Id = i.PartId
JOIN model m ON m.Id = p.ModelId
JOIN color c ON c.Id = p.ColorId
JOIN parttype pt ON pt.Id = p.PartTypeId
WHERE
barcode1 = @barcode
OR barcode2 = @barcode
OR barcode3 = 'DR963560860GYYQBKBBD2'
OR barcode4 = 'DR963560860GYYQBKBBD2';
我想得到的是第一个select语句中inventory表中的所有数据,另一个来自另一个表。
之前,我有两个问题
SELECT
*
FROM
inventory
WHERE
barcode1 = @Barcode
OR barcode2 = @Barcode
OR barcode3 = @Barcode
OR barcode4 = @Barcode`
它将检索库存中的所有信息,另一个是
SELECT
p.id AS 'PartId',
m.`Name` AS 'Model',
c.`Name` AS 'Color',
pt.`Name` AS 'PartType'
FROM
inventory i
JOIN part p ON p.Id = i.PartId
JOIN model m ON m.Id = p.ModelId
JOIN color c ON c.Id = p.ColorId
JOIN parttype pt ON pt.Id = p.PartTypeId
WHERE
barcode1 = @Barcode
OR barcode2 = @Barcode
OR barcode3 = @Barcode
OR barcode4 = @Barcode
只需加载四列。
由于我的输出加载太慢,我将把它合并到一个查询中。这可能吗?我该怎么做?
我是mysql的初学者。
2条答案
按热度按时间c8ib6hqw1#
你的问题是因为你使用
Union
在两个列数不同的表上。例如,如果你在表A中得到一些东西:还有一张table
如果您尝试合并它们,您将得到错误,因为它们无法合并(因为列数不同)。
所以你的问题是你的第一个
Select *...
返回的列多于第二个选择,其中只选择4列。解决这个问题的关键是指定需要选择哪些列,以便两个选择都有相同的列数。像这样的
cfh9epnr2#
我不明白为什么在连接(水平合并)看起来更合适的时候使用并集(垂直合并)