[英]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.