[英]the used select statements have a different number of columns mysql
我有一个错误“所使用的选择语句具有不同数量的mysql列”
我的查询
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语句中库存表中的所有数据,另一个是来自另一个表。
之前,我有两个查询
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的初学者。
您遇到的问题是因为您在具有不同列数的两个表上使用了Union
。 例如,如果您在TableA中得到了一些东西:
| Id | Name | Age|
+----+------+----+
| 1 | Andy | 3 |
还有另一个TableB
| Id | Name | Age| Gender |
+----+------+----+--------|
| 1 | Andy | 3 | Male |
如果您尝试合并它们,则会出错,因为它们无法合并(因为列数不同)。
因此,您的问题是您的第一个Select *...
返回的列比第二个select中仅选择4列的列多。 解决它的关键是确切指定需要选择的列,以使两个选择都具有相同的列数。
像这样
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
i.barcode1 = 'DR963560860GYYQBKBBD2'
OR i.barcode2 = 'DR963560860GYYQBKBBD2'
OR i.barcode3 = 'DR963560860GYYQBKBBD2'
OR i.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 i.*,
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.